앞서 포스팅에서 변수와 자료형을 배웠다면, 이제 이 값들로 계산하고 판단할 수 있어야 하겠죠?
바로 그걸 가능하게 해 주는 게 연산자(Operator)입니다.
1. 산술 연산자(Arthmetic Operators)
숫자 간의 사칙 연산을 수행하는 기본 연산자입니다.
연산자 | 의미 | 예시 (int a = 10, b = 3) | 결과 |
+ | 덧셈 | a + b | 13 |
- | 뺄셈 | a - b | 7 |
* | 곱셈 | a * b | 30 |
/ | 나눗셈 | a / b | 3 |
% | 나머지 | a % b | 1 |
⚠️ /는 정수 나눗셈 시 소수점 이하가 잘립니다. 10 / 3 = 3
소수점을 원하면 double 또는 float 자료형을 사용해야 합니다.
2. 비교 연산자 (Relational Operators)
두 값의 크기나 동일성 여부를 비교하고, true 또는 false를 반환합니다.
연산자 | 의미 | 예시 (a = 10, b = 3) | 결과 |
== | 같다 | a == b | false |
!= | 다르다 | a != b | true |
> | 크다 | a > b | true |
< | 작다 | a < b | false |
>= | 크거나 같다 | a >= b | true |
<= | 작거나 같다 | a <= b | false |
💡 ==는 숫자 비교에는 괜찮지만, 문자열 비교에는 equals()를 사용해야 합니다.
3. 논리 연산자 (Logical Operators)
boolean 값을 대상으로 연산하여 조건 판단에 사용됩니다.
연산자 | 의미 | 예시 (x = true, y = false) | 결과 |
&& | 논리 AND | x && y | false |
|| | 논리 OR | x || y | true |
! | 논리 NOT (부정) | !x | false |
⚠️ &&와 ||는 단축 평가(short-circuit)가 적용됩니다. 앞쪽 결과만으로 결과가 확정되면, 뒤쪽은 계산하지 않습니다.
예를 들어, &&인 경우 앞쪽이 false이면 결과가 적용되고, ||인 경우 앞쪽이 true이면 결과가 확정됩니다.
4. 대입 연산자 (Assignment Operators)
변수에 값을 저장하거나 조작된 결과를 재할당하는 데 사용합니다.
연산자 | 의미 | 예시 | 동등한 표현 |
= | 값 할당 | a = 5 | |
+= | 덧셈 후 대입 | a += 3 | a = a + 3 |
-= | 뺄셈 후 대입 | a -= 2 | a = a - 2 |
*= | 곱셈 후 대입 | a *= 4 | a = a * 4 |
/= | 나눗셈 후 대입 | a /= 2 | a = a / 2 |
%= | 나머지 후 대입 | a %= 3 | a = a % 3 |
5. 증감 연산자 (Increment / Decrement)
변수의 값을 1씩 증가 또는 감소시킵니다.
연산자 | 의미 | 예시 (int a= 5) | 결과 |
++ | 1 증가 | a++ 또는 ++a | 6 |
-- | 1 감소 | a-- 또는 --a | 4 |
🔍 전위형 (++a)은 증가 → 사용, 후위형 (a++)은 사용 → 증가
6. 삼항 연산자 (Ternary Operator)
조건에 따라 두 값을 선택하는 축약된 if-else 문입니다. if-else는 조건문입니다. 뒤에서 자세히 다루도록 하겠습니다.
// 조건식 ? 값1 : 값2;
int score = 80;
String result = (score >= 70) ? "합격" : "불합격";
System.out.println(result); // "합격"
7. 비트 연산자 (Bitwise Operators)
정수형 값의 이진수 비트 단위로 연산을 수행합니다. 즉, 우리가 흔히 쓰는 10진수 숫자를 이진수로 바꾸고, 그 비트 단위로 AND, OR, XOR, SHIFT 같은 연산을 수행하는 거예요.
연산자 | 의미 | 예시 (8비트 기준, a = 5, b = 3) | 결과 |
& | 비트 AND: 두 비트가 모두 1이면 1 | a & b (101 & 011) | 1 |
| | 비트 OR: 두 비트 중 하나가 1이면 1 | a | b (101 | 011) | 7 |
^ | 비트 XOR: 두 비트가 서로 다르면 1 | a ^ b (101 ^ 011) | 6 |
~ | 비트 NOT: 1을 0으로, 0을 1로 반전 | ~a (~00000101 = 11111010) | -6 |
<< | 왼쪽 시프트: 비트를 왼쪽으로 밀기 (2배씩 증가) | a << 1 (00001010) | 10 |
>> | 오른쪽 시프트: 비트를 오른쪽으로 밀기 (2로 나누기) | a >> 1 (00000010) | 2 |
💡 비트 연산은 정수 최적화, 마스크 처리, 플래그 제어 등에 사용됩니다.
8. 연산자 우선순위 요약
자바는 여러 연산자가 함께 등장했을 때 우선순위에 따라 계산 순서가 정해집니다.
우선순위 | 연산자 | 설명 |
1 | (), [], . | 괄호, 배열, 참조 |
2 | ++, --, !, ~ | 단항 연산자 |
3 | *, /, % | 곱셈, 나눗셈, 나머지 |
4 | +, - | 덧셈, 뺄셈 |
5 | <<, >>, >>> | 비트 시프트 |
6 | <, >, <=, >= | 비교 연산자 |
7 | ==, != | 동일성 비교 |
8 | &, ^, |, ~ | 비트 연산자 |
9 | &&, || ! | 논리 연산자 |
10 | ? : | 삼항 연산자 |
11 | =, +=, -=, … | 대입 연산자 |