✨ 자바 연산자 완전 정리 (Java Operators)
자바(Java)에서 변수 선언과 초기화를 배웠다면, 이제는 변수를 어떻게 다루는지 아는 것이 중요하죠. 그 핵심이 바로 연산자(Operator) 입니다!
🔧 연산자란?
연산자란 특정 작업을 수행하는 기호 또는 기법으로, 하나 이상의 피연산자(operand)를 계산하여 결과를 반환합니다.
🧠 연산자 우선순위 한눈에 보기
우선순위 |
연산자 종류 |
예시 |
1 |
Postfix |
a++, a-- |
2 |
Unary |
++a, --a, +a, -a, ~, ! |
3 |
Multiplicative |
*, /, % |
4 |
Additive |
+, - |
5 |
Shift |
<<, >>, >>> |
6 |
Relational |
<, >, <=, >=, instanceof |
7 |
Equality |
==, != |
8 |
Bitwise AND |
& |
9 |
Bitwise XOR |
^ |
10 |
Bitwise OR |
| |
11 |
Logical AND |
&& |
12 |
Logical OR |
|| |
13 |
Ternary |
? : |
14 |
Assignment |
=, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>= |
📌 연산자는 우선순위에 따라 계산되며, 일반적으로 왼쪽 → 오른쪽 방향으로 평가됩니다. (단, 할당 연산자는 오른쪽 → 왼쪽)
## 🌀 증감 연산자 비교: 전위 vs 후위
전위(Prefix)와 후위(Postfix)는 ++
, --
연산자의 위치에 따라 동작 방식이 다릅니다.
구분 |
예시 |
결과 설명 |
전위 |
int y = ++x; |
x 값 1증감 후 y에 대입 |
후위 |
int y = x++; |
y에 대입 후 x 값 1 증감 |
int x = 5;
int a = ++x; // x는 먼저 증가해서 6, a = 6
int b = x--; // b는 증가된 x값인 6을 먼저 사용, 이후 x는 5가 됨
- ✅ 전위: 먼저 증가/감소 → 그 값을 사용
- ✅ 후위: 현재 값을 사용 → 그 후 증가/감소
➕ Unary (단항 연산자)
연산자 |
의미 |
+ |
양수 표시 |
- |
음수로 변환 |
++ |
값 1 증가 |
-- |
값 1 감소 |
! |
논리 반전 |
~ |
비트 반전 |
➗ Arithmetic (산술 연산자)
연산자 |
의미 |
+ |
더하기 |
- |
빼기 |
* |
곱하기 |
/ |
나누기 |
% |
나머지 |
int result = 5 % 2; // result = 1
💡 문자열 연결도 +
연산자로 가능합니다.
🧭 Shift 연산자
👉 비트를 왼쪽/오른쪽으로 밀어 계산하는 마법의 연산자!
정수를 이진수로 바꿔서, 비트를 왼쪽 또는 오른쪽으로 이동시키는 연산자!
연산자 |
설명 |
<< |
왼쪽 시프트 (곱셈 효과) |
>> |
부호 유지 오른쪽 시프트 (나눗셈 효과) |
>>> |
부호 없는 오른쪽 시프트 |
🧭 Shift 연산자 종류별 설명
🟩 1. <<
왼쪽 시프트 (Left Shift)
int a = 3; // 00000000 00000000 00000000 00000011
int result = a << 1;
// result = 6 // 00000000 00000000 00000000 00000110
- 왼쪽으로 비트를 1칸 이동 = 값 × 2
- 💡
a << n
은 a * 2ⁿ
과 동일
🟨 2. >>
오른쪽 시프트 (Right Shift, 부호 유지)
int a = -8; // 11111111 11111111 11111111 11111000
int result = a >> 2;
// result = -2 // 11111111 11111111 11111111 11111110
- 음수도 부호(맨 앞자리 1) 를 유지하며 이동
- 💡
a >> n
은 a / 2ⁿ
과 비슷하지만, 음수는 반올림 주의
🟥 3. >>>
부호 없는 오른쪽 시프트 (Unsigned Right Shift)
int a = -8; // 11111111 11111111 11111111 11111000
int result = a >>> 2;
// result = 양수값! // 00111111 11111111 11111111 11111110
- 부호 비트 무시, 왼쪽에 0을 채워 넣음
- 💡 음수도 양수처럼 만들어줌
📊 세 가지 Shift 연산자 비교
연산자 |
의미 |
부호 유지 |
예시 |
<< |
왼쪽 시프트 (×2) |
해당 없음 |
3 << 1 → 6 |
>> |
오른쪽 시프트 (÷2), 부호 유지 |
✅ |
-8 >> 2 → -2 |
>>> |
오른쪽 시프트, 0으로 채움 |
❌ |
-8 >>> 2 → 양수값 출력 |
🧪 실전 예제 모음
int a = 16; // 00010000
int b = a >> 2; // 00000100 → 4
int c = a << 2; // 01000000 → 64
int d = -1 >> 1; // 여전히 -1 (부호 유지)
int e = -1 >>> 1; // 양수로 바뀜!
🔍 비교 / 관계 연산자
연산자 |
설명 |
== |
같다 |
!= |
다르다 |
> |
크다 |
< |
작다 |
>= |
크거나 같다 |
<= |
작거나 같다 |
if (a == b) {
System.out.println("같아요!");
}
🔐 논리 연산자
연산자 |
의미 |
&& |
AND (모두 true일 때 true) |
|| |
OR (하나라도 true면 true) |
! |
NOT (true ↔ false) |
🧠 단축 평가 (Short-circuit):
false && ... → 바로 false
true || ... → 바로 true
🧮 비트 연산자 (Bitwise)
연산자 |
설명 |
& |
비트 AND |
| |
비트 OR |
^ |
비트 XOR |
~ |
비트 NOT (보수) |
int a = 5, b = 3;
System.out.println(a & b); // 출력: 1
❓ 삼항 연산자 (Ternary)
int result = (x > 0) ? 1 : -1;
✨ (조건) ? 참일 때 : 거짓일 때
💼 할당 연산자 (Assignment)
연산자 |
의미 |
= |
대입 |
+= |
더하고 대입 |
-= |
빼고 대입 |
*= |
곱하고 대입 |
/= |
나누고 대입 |
%= |
나머지 대입 |
&= |
비트 AND 대입 |
^= |
비트 XOR 대입 |
|= |
비트 OR 대입 |
<<= |
왼쪽 시프트 대입 |
>>= |
오른쪽 시프트 대입 |
>>>= |
부호 없는 시프트 대입 |
int c = 5;
c += 3; // c = 8
🧬 instanceof 연산자
if (obj instanceof String) {
System.out.println("문자열입니다!");
}
객체가 특정 클래스의 인스턴스인지 확인할 때 사용합니다.
✅ 마무리 요약
분류 |
연산자 예시 |
산술 |
+, -, *, /, % |
단항 |
++, --, !, ~ |
관계 |
==, !=, >, <, >=, <= |
논리 |
&&, ||,! |
비트 |
&, |, ^, ~ |
시프트 |
<<, >>, >>> |
삼항 |
(조건) ? true : false |
할당 |
=, +=, -=, *=, /=, %=, <<=, >>=, etc |
타입비교 |
instanceof |
자바의 다양한 연산자를 정확히 이해하면 코드의 의미, 흐름, 계산 과정이 눈에 보입니다!
이제 연산자 마스터 완료! 💪