자바 입문에서 변수 다음으로 자주 만나는 개념이 연산자입니다. 연산자는 값을 계산하거나 비교하거나, 변수에 값을 넣을 때 사용하는 기호입니다.

앞에서 변수 개념이 아직 헷갈린다면 자바 변수 완전 정리 — 이름표 붙은 보관함으로 이해하기를 먼저 보고 오는 편이 좋습니다. 이번 글에서는 산술 연산자부터 대입 연산자까지 입문 단계에서 자주 쓰는 연산자를 한 번에 정리합니다.


1. 연산자가 뭐냐면

연산자는 계산을 시키는 기호입니다. +, -, *, ==, && 같은 것들이 연산자입니다.

연산자를 이해할 때는 연산자피연산자를 같이 보면 쉽습니다.

baskingTemp + 2

위 코드에서 +는 연산자입니다. baskingTemp2는 계산에 들어가는 값이므로 피연산자입니다.

이름의미예시
연산자계산이나 비교를 시키는 기호+, ==, &&
피연산자연산에 사용되는 값baskingTemp, 2

자바 입문 단계에서는 아래 다섯 종류를 먼저 익히면 충분합니다.

분류기호
산술+, -, *, /, %
증감++, --
비교==, !=, >, <, >=, <=
논리&&, `
대입=, +=, -=, *=, /=, %=

2. 산술 연산자

산술 연산자는 숫자를 계산할 때 사용합니다. 덧셈, 뺄셈, 곱셈, 나눗셈은 수학에서 배운 것과 거의 같습니다.

public class Arithmetic {
    public static void main(String[] args) {
        int food = 5;
        int turtle = 2;

        System.out.println(food + turtle); // 7
        System.out.println(food - turtle); // 3
        System.out.println(food * turtle); // 10
        System.out.println(food / turtle); // 2
        System.out.println(food % turtle); // 1
    }
}

여기서 처음 헷갈릴 수 있는 부분은 /%입니다.

연산자의미예시
/나누기5 / 2 결과는 2
%나머지5 % 2 결과는 1

int 나누기는 소수점이 잘립니다

int끼리 나누면 결과도 정수입니다. 그래서 5 / 2의 결과는 2.5가 아니라 2입니다.

System.out.println(5 / 2); // 2

소수점까지 보고 싶다면 double을 사용해야 합니다.

System.out.println(5.0 / 2); // 2.5

0으로 나누면 안 됩니다

정수에서 10 / 0처럼 0으로 나누면 오류가 납니다. 자바에서는 이런 경우 ArithmeticException이 발생합니다.

System.out.println(10 / 0); // 오류

입력값으로 0이 들어올 수 있다면 나누기 전에 먼저 확인해야 합니다.

int divisor = 0;

if (divisor != 0) {
    System.out.println(10 / divisor);
}

3. 문자열 더하기

자바에서는 +로 숫자뿐 아니라 문자열도 이어 붙일 수 있습니다.

String name = "소통이";
System.out.println("우리집 거북: " + name);

실행 결과는 다음과 같습니다.

우리집 거북: 소통이

핵심 규칙은 간단합니다.

문자열과 다른 값을 더하면 결과는 문자열이 됩니다.

System.out.println("나이: " + 7); // 나이: 7
System.out.println(7 + "살");    // 7살

숫자 7도 문자열 옆에 붙는 순간 화면에는 글자처럼 이어져 출력됩니다.

다만 계산과 문자열 연결이 섞이면 순서에 따라 결과가 달라질 수 있습니다.

System.out.println(1 + 2 + "점"); // 3점
System.out.println("점수: " + 1 + 2); // 점수: 12

첫 번째 코드는 1 + 2를 먼저 계산해서 3점이 됩니다. 두 번째 코드는 "점수: " + 1에서 이미 문자열이 되었기 때문에 뒤의 2도 이어 붙습니다.


4. 연산자 우선순위

자바 연산자에도 먼저 계산되는 순서가 있습니다. 수학처럼 곱셈과 나눗셈이 덧셈과 뺄셈보다 먼저 계산됩니다.

System.out.println(1 + 2 * 3); // 7

2 * 3이 먼저 계산되고, 그다음 1을 더합니다.

우선순위를 모두 외울 필요는 없습니다. 입문 단계에서는 아래 두 가지만 기억하면 충분합니다.

  1. 곱셈, 나눗셈, 나머지가 덧셈과 뺄셈보다 먼저입니다.
  2. 헷갈리면 괄호 ()를 사용합니다.
int result = (2 * 2) + (3 * 3);
System.out.println(result); // 13

괄호가 없어도 같은 결과가 나오지만, 괄호를 쓰면 계산 의도가 더 분명해집니다.

자주 보는 우선순위만 간단히 정리하면 다음과 같습니다.

괄호
단항 연산자
곱셈, 나눗셈, 나머지
덧셈, 뺄셈
비교 연산자
논리 연산자
대입 연산자

5. 증감 연산자

증감 연산자는 값을 1 늘리거나 1 줄일 때 사용합니다.

int day = 0;

day = day + 1;
day++;
day--;

day++day = day + 1과 같은 의미입니다. day--day = day - 1과 같은 의미입니다.

전위와 후위

++는 변수 앞에 붙일 수도 있고 뒤에 붙일 수도 있습니다.

표현이름동작
++a전위 증가먼저 1 증가한 뒤 사용
a++후위 증가먼저 사용한 뒤 1 증가

예시를 보면 차이가 더 잘 보입니다.

int a = 1;
int b = ++a;

System.out.println(a); // 2
System.out.println(b); // 2

++a는 먼저 a를 2로 만든 뒤, 그 값을 b에 넣습니다.

int a = 1;
int c = a++;

System.out.println(a); // 2
System.out.println(c); // 1

a++는 먼저 현재 값인 1을 c에 넣고, 그다음 a를 2로 증가시킵니다.

처음에는 한 줄 안에서 다른 변수에 대입하며 쓰기보다, 아래처럼 단독으로 쓰는 편이 덜 헷갈립니다.

day++;
count--;

6. 비교 연산자

비교 연산자는 두 값을 비교해서 true 또는 false를 돌려줍니다. 조건문을 배울 때 자주 사용합니다.

int score = 80;

System.out.println(score == 100); // false
System.out.println(score != 100); // true
System.out.println(score >= 80);  // true
연산자의미
==같은가
!=다른가
>큰가
<작은가
>=크거나 같은가
<=작거나 같은가

=와 ==는 다릅니다

===는 자바 입문에서 자주 헷갈리는 부분입니다.

기호의미
=값을 넣는다
==값이 같은지 비교한다
int score = 80;
System.out.println(score == 80); // true

score = 80은 값을 넣는 코드입니다. score == 80은 값이 같은지 확인하는 코드입니다.

문자열 비교는 equals를 사용합니다

문자열이 같은지 비교할 때는 == 대신 .equals()를 사용합니다.

String pet = "소통이";

System.out.println(pet.equals("소통이")); // true

지금은 이유를 깊게 외우기보다 **문자열 비교는 .equals()**라고 기억하면 됩니다. 나중에 참조 타입을 배우면 왜 그런지 더 자연스럽게 이해할 수 있습니다.


7. 논리 연산자

논리 연산자는 truefalse를 조합할 때 사용합니다. 조건이 여러 개일 때 특히 많이 사용합니다.

연산자의미참이 되는 조건
&&그리고양쪽이 모두 참
``
!부정참과 거짓을 뒤집음

예를 들어 바스킹존 온도가 30도 이상이고 35도 이하인지 확인하려면 이렇게 쓸 수 있습니다.

int temp = 32;

boolean ok = temp >= 30 && temp <= 35;
System.out.println(ok); // true

temp >= 30도 참이고, temp <= 35도 참이기 때문에 전체 결과는 true입니다.

게임 상태를 예로 들면 아래처럼 쓸 수 있습니다.

int hp = 10;
boolean isStunned = false;

boolean canMove = hp > 0 && !isStunned;
System.out.println(canMove); // true

hp가 0보다 크고, 기절 상태가 아니라면 움직일 수 있다는 뜻입니다.


8. 대입 연산자와 축약형

대입 연산자는 변수에 값을 넣을 때 사용합니다. 가장 기본은 =입니다.

int gold = 5;

여기에 산술 연산을 함께 줄여 쓰는 축약형도 있습니다.

축약형원래 의미
a += 3a = a + 3
a -= 2a = a - 2
a *= 4a = a * 4
a /= 3a = a / 3
a %= 5a = a % 5
int gold = 5;

gold += 3;
gold *= 2;

System.out.println(gold); // 16

처음에는 축약형을 무리해서 쓰기보다, 원래 의미로 풀어 읽을 수 있는지가 중요합니다.


9. 직접 풀어본 연습 문제

연산자는 눈으로 읽는 것보다 직접 코드를 쳐보는 편이 훨씬 잘 남습니다. 아래 연습 문제 3개는 산술 연산, 비교 연산, 축약 대입 연산을 한 번씩 확인하기 좋게 다시 구성한 예시입니다.

과일 3상자의 전체 개수와 남는 개수 구하기

public class FruitBoxEx {
    public static void main(String[] args) {
        int box1 = 12;
        int box2 = 15;
        int box3 = 9;
        int basketSize = 5;

        int total = box1 + box2 + box3;
        int basketCount = total / basketSize;
        int remain = total % basketSize;

        System.out.println(total);       // 36
        System.out.println(basketCount); // 7
        System.out.println(remain);      // 1
    }
}

이 문제에서는 +, /, %를 함께 확인할 수 있습니다. 전체 개수를 구한 뒤, 몇 묶음이 나오는지와 몇 개가 남는지를 나눠서 보면 연산자 역할이 더 분명해집니다.

할인 대상인지 판정하기

int age = 17;
boolean hasCoupon = true;

boolean canDiscount = age < 20 || hasCoupon;
System.out.println(canDiscount); // true

이 코드는 나이가 20세 미만이거나 쿠폰이 있는지 확인합니다. ||는 둘 중 하나만 참이어도 전체 결과가 참이 된다는 점을 확인하기 좋습니다.

게임 점수 누적하기

public class ScoreEx {
    public static void main(String[] args) {
        int score = 50;

        score += 10;
        score -= 3;
        score *= 2;

        System.out.println(score); // 114
    }
}

이 문제는 +=, -=, *= 같은 축약 대입 연산자를 연달아 연습하는 예시입니다. 한 줄씩 직접 계산해 보면 값이 어떻게 바뀌는지 더 잘 보입니다.


정리

자바 연산자는 값을 계산하고, 비교하고, 조건을 조합하고, 변수에 다시 저장할 때 사용합니다.

처음에는 아래 내용을 먼저 기억하면 됩니다.

  • %는 나머지를 구하는 연산자입니다.
  • int / int는 소수점이 잘립니다.
  • 문자열과 값을 더하면 결과는 문자열이 됩니다.
  • =는 대입이고, ==는 비교입니다.
  • 문자열 비교는 .equals()를 사용합니다.
  • &&, ||, !는 여러 조건을 조합할 때 사용합니다.

연산자는 이후 조건문, 반복문, 배열, 알고리즘 문제에서 계속 등장합니다. 이번 글의 예제를 직접 실행해보면 다음 문법을 배울 때 훨씬 덜 헷갈립니다.