자바 입문에서 변수 다음으로 자주 만나는 개념이 연산자입니다. 연산자는 값을 계산하거나 비교하거나, 변수에 값을 넣을 때 사용하는 기호입니다.
앞에서 변수 개념이 아직 헷갈린다면 자바 변수 완전 정리 — 이름표 붙은 보관함으로 이해하기를 먼저 보고 오는 편이 좋습니다. 이번 글에서는 산술 연산자부터 대입 연산자까지 입문 단계에서 자주 쓰는 연산자를 한 번에 정리합니다.
1. 연산자가 뭐냐면
연산자는 계산을 시키는 기호입니다.
+, -, *, ==, && 같은 것들이 연산자입니다.
연산자를 이해할 때는 연산자와 피연산자를 같이 보면 쉽습니다.
baskingTemp + 2
위 코드에서 +는 연산자입니다.
baskingTemp와 2는 계산에 들어가는 값이므로 피연산자입니다.
| 이름 | 의미 | 예시 |
|---|---|---|
| 연산자 | 계산이나 비교를 시키는 기호 | +, ==, && |
| 피연산자 | 연산에 사용되는 값 | 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을 더합니다.
우선순위를 모두 외울 필요는 없습니다. 입문 단계에서는 아래 두 가지만 기억하면 충분합니다.
- 곱셈, 나눗셈, 나머지가 덧셈과 뺄셈보다 먼저입니다.
- 헷갈리면 괄호
()를 사용합니다.
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. 논리 연산자
논리 연산자는 true와 false를 조합할 때 사용합니다.
조건이 여러 개일 때 특히 많이 사용합니다.
| 연산자 | 의미 | 참이 되는 조건 |
|---|---|---|
&& | 그리고 | 양쪽이 모두 참 |
| ` | ` | |
! | 부정 | 참과 거짓을 뒤집음 |
예를 들어 바스킹존 온도가 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 += 3 | a = a + 3 |
a -= 2 | a = a - 2 |
a *= 4 | a = a * 4 |
a /= 3 | a = a / 3 |
a %= 5 | a = 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()를 사용합니다. &&,||,!는 여러 조건을 조합할 때 사용합니다.
연산자는 이후 조건문, 반복문, 배열, 알고리즘 문제에서 계속 등장합니다. 이번 글의 예제를 직접 실행해보면 다음 문법을 배울 때 훨씬 덜 헷갈립니다.