목록으로

[자바 기초] 4강. 컴퓨터는 계산기다: 연산자(Operator) 완벽 정복

지난 시간 복습과 이번 강의 목표

지난 3강에서는 Scanner를 이용해 사용자의 입력을 받는 법을 배웠습니다. 이제 재료(데이터)는 준비되었으니, 요리(연산)를 할 차례입니다.

프로그래밍(Programming)의 어원이 '계산하다'에서 나온 만큼, 자바는 강력한 계산 능력을 갖추고 있습니다. 하지만 우리가 알던 수학 상식과는 조금 다른 규칙들이 숨어 있습니다.

오늘은 자바의 사칙연산과, 앞으로 정말 많이 쓰게 될 비교 연산에 대해 배워보겠습니다.


1. 산술 연산자: 계산기의 기본

컴퓨터에서 사용하는 더하기, 빼기 기호는 우리가 아는 것과 비슷하지만 곱하기와 나누기가 조금 다릅니다.

  • + (더하기): 10 + 5 → 15
  • - (빼기): 10 - 5 → 5
  • * (곱하기): X가 아니라 **별표(*)**를 씁니다. (10 * 5 → 50)
  • / (나누기): 슬래시(/)를 씁니다. (⭐ 주의 필요)
  • % (나머지): 퍼센트가 아니라 나머지를 구하는 기호입니다. (⭐ 매우 중요)

🚨 선생님의 긴급 점검: 나눗셈의 함정

초보자가 가장 많이 하는 실수 1위입니다. 다음 코드를 실행하면 답이 무엇일까요?

int a = 10;
int b = 3;
System.out.println(a / b);

"3.3333... 아니야?" 라고 생각하셨다면 땡! 입니다. 정답은 3입니다.

  • 이유: 자바에서 정수 나누기 정수는 무조건 **정수(몫)**만 남깁니다. 소수점은 과감하게 버려버립니다.
  • 해결법: 소수점까지 보고 싶다면, 숫자 중 하나를 실수(double)로 바꿔서 계산해야 합니다. (10.0 / 33.3333...)

💡 나머지 연산자(%)는 언제 쓰나요?

10 % 3의 결과는 몫인 3을 뺀 나머지, 즉 **1**이 나옵니다. 이게 왜 중요하냐고요? 개발에서 엄청나게 많이 쓰입니다.

  1. 홀수/짝수 판별: 숫자 % 2가 0이면 짝수, 1이면 홀수.
  2. 배수 판별: 숫자 % 3이 0이면 3의 배수.
  3. 시간 계산: 초를 분/초로 나눌 때 (아래 실습에서 확인!)

2. 문자열 더하기: 글자 이어 붙이기

숫자끼리 더하면 계산이 되지만, 글자끼리 더하면 이어 붙이기가 됩니다.

String str1 = "안녕";
String str2 = "하세요";
System.out.println(str1 + str2); // 결과: "안녕하세요"

주의할 점: 숫자와 문자를 섞어서 더하면, 숫자가 문자로 변해서 이어 붙습니다.

  • "내 나이는 " + 20"내 나이는 20"

3. 비교 연산자: 참(True)이냐 거짓(False)이냐

계산만큼 중요한 것이 **"비교"**입니다. 결과는 항상 숫자가 아닌 boolean (true/false)으로 나옵니다. 나중에 배울 **조건문(if)**의 핵심 재료가 됩니다.

  • > (크다): 10 > 5true
  • < (작다): 10 < 5false
  • >= (크거나 같다): 10 >= 10true
  • <= (작거나 같다): 5 <= 10true
  • == (같다): 수학의 =와 다릅니다! 두 개(==)를 써야 같다는 뜻입니다.
  • != (다르다): 느낌표는 부정을 뜻합니다. (10 != 5true)

4. 실전 예제: 초(Second) 변환기

자, 배운 연산자를 총동원해서 유용한 도구를 만들어봅시다. "4000초는 몇 시간, 몇 분, 몇 초일까?" 이걸 계산해 주는 프로그램입니다. 나눗셈(/)과 나머지 연산(%)을 이해하는 데 최고의 예제입니다.

src/Main.java에 작성해 보세요.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("계산할 초(Second)를 입력하세요: ");
        int totalSeconds = sc.nextInt(); // 예: 4000 입력

        // 1. 분(Minute) 구하기
        // 4000초를 60으로 나누면 전체 '분'이 나옵니다.
        int minutes = totalSeconds / 60; 
        
        // 2. 남은 초(Second) 구하기
        // 60으로 나누고 남은 찌꺼기가 진짜 '초'입니다.
        int seconds = totalSeconds % 60;

        // 3. 시간(Hour) 구하기 (심화)
        // 전체 분을 다시 60으로 나누면 '시간'이 됩니다.
        int hours = minutes / 60;
        
        // 시간으로 빠져나간 만큼 분에서 제외해야겠죠?
        // (사실 더 쉬운 방법이 있지만, 논리 흐름을 위해 이렇게 짭니다)
        int remainMinutes = minutes % 60;

        System.out.println("=== 계산 결과 ===");
        System.out.println(totalSeconds + "초는");
        System.out.println(hours + "시간 " + remainMinutes + "분 " + seconds + "초 입니다.");
    }
}

실행 결과 (4000을 입력했을 때)

계산할 초(Second)를 입력하세요: 4000
=== 계산 결과 ===
4000초는
1시간 6분 40초 입니다.

해설:

  • 4000 / 60 = 몫 66 (분)
  • 4000 % 60 = 나머지 40 (초)
  • 66 / 60 = 몫 1 (시간)
  • 66 % 60 = 나머지 6 (남은 분)
  • 결과: 1시간 6분 40초 (정확하죠?)

5. 자주 하는 실수 (선생님의 잔소리)

  1. 같다는 표시는 == 입니다.

    • a = 10 (a에 10을 대입해라)
    • a == 10 (a와 10이 같니?)
    • 초보 때 정말 많이 틀립니다. 꼭 기억하세요.
  2. 0으로 나누지 마세요.

    • 10 / 0 처럼 숫자를 0으로 나누면 프로그램이 즉시 뻗어버립니다. (ArithmeticException 발생)

다음 강의 예고

오늘 우리는 데이터를 더하고, 나누고, 비교하는 법까지 배웠습니다. 하지만 아직 프로그램이 스스로 판단하지는 못합니다.

예를 들어 "시험 점수가 60점 이상이면 '합격', 아니면 '불합격'을 출력해" 같은 기능을 만들고 싶지 않나요?

다음 **[5강]**에서는 프로그래밍의 꽃이자 지능의 시작인 **조건문(if, switch)**에 대해 알아보겠습니다. 이제 진짜 AI 같은 프로그램을 만들 수 있게 됩니다.

👉 5강 바로가기: 프로그램에게 지능 심어주기, 조건문