연산자
Java1분 읽기
산술 연산자 (Arithmetic Operators)
산술 연산자는 기본적인 수학 연산을 수행하는 데 사용된다.
| 연산자 | 이름 | 설명 | 예제 | 결과 |
|---|---|---|---|---|
+ | 덧셈 | 두 피연산자의 값을 더한다. | 5 + 3 | 8 |
- | 뺄셈 | 첫 번째 피연산자에서 두 번째 피연산자를 뺀다. | 5 - 3 | 2 |
* | 곱셈 | 두 피연산자의 값을 곱한다. | 5 * 3 | 15 |
/ | 나눗셈 | 첫 번째 피연산자를 두 번째 피연산자로 나눈다. | 15 / 3 | 5 |
% | 나머지 | 첫 번째 피연산자를 두 번째 피연산자로 나눈 나머지를 반환한다. | 5 % 3 | 2 |
++ | 증가 | 피연산자의 값을 1 증가시킨다. | int a = 5; a++; | a는 6 |
-- | 감소 | 피연산자의 값을 1 감소시킨다. | int a = 5; a--; | a는 4 |
참고: 증가(++)와 감소(--) 연산자는 전위(prefix) 또는 후위(postfix) 형태로 사용할 수 있다.
- 전위 증가(
++a): 값을 증가시킨 후 표현식에 사용 - 후위 증가(
a++): 표현식에 사용된 후 값을 증가시킴
할당 연산자 (Assignment Operators)
할당 연산자는 변수에 값을 할당하는 데 사용된다.
| 연산자 | 이름 | 설명 | 예제 | 동일 표현 |
|---|---|---|---|---|
= | 할당 | 우측 피연산자의 값을 좌측 피연산자에 할당한다. | a = 5 | - |
+= | 덧셈 할당 | 덧셈 후 결과를 좌측 피연산자에 할당한다. | a += 5 | a = a + 5 |
-= | 뺄셈 할당 | 뺄셈 후 결과를 좌측 피연산자에 할당한다. | a -= 5 | a = a - 5 |
*= | 곱셈 할당 | 곱셈 후 결과를 좌측 피연산자에 할당한다. | a *= 5 | a = a * 5 |
/= | 나눗셈 할당 | 나눗셈 후 결과를 좌측 피연산자에 할당한다. | a /= 5 | a = a / 5 |
%= | 나머지 할당 | 나머지 연산 후 결과를 좌측 피연산자에 할당한다. | a %= 5 | a = a % 5 |
&= | 비트 AND 할당 | 비트 AND 연산 후 결과를 좌측 피연산자에 할당한다. | a &= 5 | a = a & 5 |
|= | 비트 OR 할당 | 비트 OR 연산 후 결과를 좌측 피연산자에 할당한다. | a |= 5 | a = a | 5 |
^= | 비트 XOR 할당 | 비트 XOR 연산 후 결과를 좌측 피연산자에 할당한다. | a ^= 5 | a = a ^ 5 |
<<= | 왼쪽 시프트 할당 | 왼쪽 시프트 연산 후 결과를 좌측 피연산자에 할당한다. | a <<= 2 | a = a << 2 |
>>= | 오른쪽 시프트 할당 | 오른쪽 시프트 연산 후 결과를 좌측 피연산자에 할당한다. | a >>= 2 | a = a >> 2 |
>>>= | 부호 없는 오른쪽 시프트 할당 | 부호 없는 오른쪽 시프트 연산 후 결과를 좌측 피연산자에 할당한다. | a >>>= 2 | a = a >>> 2 |
비교 연산자 (Comparison Operators)
비교 연산자는 두 값을 비교하는 데 사용되며, 결과는 항상 boolean 타입(true 또는 false)이다.
| 연산자 | 이름 | 설명 | 예제 | 결과 |
|---|---|---|---|---|
== | 같음 | 두 피연산자의 값이 같은지 비교한다. | 5 == 3 | false |
!= | 다름 | 두 피연산자의 값이 다른지 비교한다. | 5 != 3 | true |
> | 초과 | 좌측 피연산자가 우측 피연산자보다 큰지 비교한다. | 5 > 3 | true |
< | 미만 | 좌측 피연산자가 우측 피연산자보다 작은지 비교한다. | 5 < 3 | false |
>= | 이상 | 좌측 피연산자가 우측 피연산자보다 크거나 같은지 비교한다. | 5 >= 5 | true |
<= | 이하 | 좌측 피연산자가 우측 피연산자보다 작거나 같은지 비교한다. | 5 <= 5 | true |
참고: 객체 비교 시 ==와 !=는 참조 비교(reference comparison)를 수행한다.
객체의 내용을 비교하려면 equals() 메서드를 사용해야 한다.
논리 연산자 (Logical Operators)
논리 연산자는 boolean 값(true 또는 false)에 대한 연산을 수행한다.
| 연산자 | 이름 | 설명 | 예제 | 결과 |
|---|---|---|---|---|
&& | 논리 AND | 두 피연산자가 모두 true일 때만 true를 반환한다. | true && false | false |
|| | 논리 OR | 두 피연산자 중 하나라도 true이면 true를 반환한다. | true || false | true |
! | 논리 NOT | 피연산자의 boolean 값을 반전시킨다. | !true | false |
특징
- 논리 연산자는 단락 평가(short-circuit evaluation)를 수행한다.
&&연산자는 첫 번째 피연산자가false이면 두 번째 피연산자를 평가하지 않는다.||연산자는 첫 번째 피연산자가true이면 두 번째 피연산자를 평가하지 않는다.
비트 연산자 (Bitwise Operators)
비트 연산자는 정수형 데이터의 개별 비트를 조작하는 데 사용된다.
| 연산자 | 이름 | 설명 | 예제 | 결과 |
|---|---|---|---|---|
& | 비트 AND | 두 피연산자의 대응되는 비트가 모두 1이면 1을 반환한다. | 5 & 3 | 1 (101 & 011 = 001) |
| | 비트 OR | 두 피연산자의 대응되는 비트 중 하나라도 1이면 1을 반환한다. | 5 | 3 | 7 (101 | 011 = 111) |
^ | 비트 XOR | 두 피연산자의 대응되는 비트가 서로 다르면 1을 반환한다. | 5 ^ 3 | 6 (101 ^ 011 = 110) |
~ | 비트 보수 | 피연산자의 비트를 반전시킨다 (0은 1로, 1은 0으로). | ~5 | -6 (~00000101 = 11111010) |
<< | 왼쪽 시프트 | 좌측 피연산자의 비트를 우측 피연산자 수만큼 왼쪽으로 이동시킨다. | 5 << 1 | 10 (101 << 1 = 1010) |
>> | 오른쪽 시프트 | 좌측 피연산자의 비트를 우측 피연산자 수만큼 오른쪽으로 이동시킨다. 부호 비트가 복사된다. | 5 >> 1 | 2 (101 >> 1 = 010) |
>>> | 부호 없는 오른쪽 시프트 | 좌측 피연산자의 비트를 우측 피연산자 수만큼 오른쪽으로 이동시킨다. 상위 비트는 0으로 채워진다. | 5 >>> 1 | 2 (00000101 >>> 1 = 00000010) |
삼항 연산자 (Ternary Operator)
조건에 따라 두 값 중 하나를 선택한다.
| 연산자 | 이름 | 설명 | 예제 | 결과 |
|---|---|---|---|---|
? : | 조건 연산자 | 조건이 true이면 첫 번째 값을, false이면 두 번째 값을 반환한다. | x > 0 ? "양수" : "음수 또는 0" | x가 양수이면 "양수", 그렇지 않으면 "음수 또는 0" |
특수 연산자 (Special Operators)
이 카테고리에는 Java의 특별한 목적을 가진 연산자들이 포함된다.
| 연산자 | 이름 | 설명 | 예제 |
|---|---|---|---|
:: | 메서드 참조 연산자 | 메서드를 참조한다. | String::length |
-> | 람다 표현식 연산자 | 람다 표현식을 정의한다. (Java 8+) | (a, b) -> a + b |
연산자 우선순위 (Operator Precedence)
Java 연산자는 우선순위에 따라 평가된다.
| 우선순위 | 연산자 | 설명 |
|---|---|---|
| 1 | () [] . | 괄호, 배열 접근, 멤버 접근 |
| 2 | ++ -- | 후위 증가/감소 |
| 3 | ++ -- + - ~ ! | 전위 증가/감소, 단항 플러스/마이너스, 비트 보수, 논리 부정 |
| 4 | new (type) | 객체 생성, 타입 캐스팅 |
| 5 | * / % | 곱셈, 나눗셈, 나머지 |
| 6 | + - | 덧셈, 뺄셈 |
| 7 | << >> >>> | 비트 시프트 |
| 8 | < <= > >= instanceof | 비교 연산자, instanceof |
| 9 | == != | 동등 비교 |
| 10 | & | 비트 AND |
| 11 | ^ | 비트 XOR |
| 12 | | | 비트 OR |
| 13 | && | 논리 AND |
| 14 | || | 논리 OR |
| 15 | ? : | 삼항 조건 연산자 |
| 16 | = += -= *= /= %= &= ^= |= <<= >>= >>>= | 할당 연산자 |
참고: 같은 우선순위를 가진 연산자가 여러 개 있을 경우, 대부분 왼쪽에서 오른쪽으로 평가된다. 할당 연산자는 오른쪽에서 왼쪽으로 평가된다.
Java 9+ 추가 연산자
Java 9 이후에 추가된 특별한 연산자들이다.
| 연산자 | 이름 | 설명 | 예제 | Java 버전 |
|---|---|---|---|---|
var | 타입 추론 | 로컬 변수의 타입을 컴파일러가 추론하도록 합니다. | var list = new ArrayList<String>(); | Java 10+ |
yield | switch 표현식 반환 | switch 표현식에서 값을 반환합니다. | yield result; | Java 13+ |
-> | case 라벨 | switch 표현식에서 화살표 라벨을 사용합니다. | case 1 -> result = "One"; | Java 14+ |
record | 레코드 선언 | 불변 데이터 객체를 선언합니다. | record Point(int x, int y) {} | Java 16+ |
sealed | 봉인 클래스 | 상속 가능한 클래스를 제한합니다. | sealed class Shape permits Circle, Rectangle {} | Java 17+ |