Java 핵심 연산자: 종합 가이드
Java는 변수를 조작하기 위한 풍부한 연산자 세트를 제공합니다. 모든 Java 연산자를 다음 그룹으로 나눌 수 있습니다:
- 산술 연산자
- 관계 연산자
- 비트 연산자
- 논리 연산자
- 대입 연산자
- 기타 연산자
산술 연산자
산술 연산자는 대수학에서와 같은 방식으로 수학적 표현식에 사용됩니다. 다음 표는 산술 연산자들을 나열합니다:
정수 변수 A가 10을, 변수 B가 20을 가진다고 가정하면:
| 연산자 |
설명 |
예제 |
| + (덧셈) |
연산자 양쪽의 값을 더합니다. |
A + B는 30을 줌 |
| - (뺄셈) |
오른쪽 피연산자를 왼쪽 피연산자에서 뺍니다. |
A - B는 -10을 줌 |
| * (곱셈) |
연산자 양쪽의 값을 곱합니다. |
A * B는 200을 줌 |
| / (나눗셈) |
왼쪽 피연산자를 오른쪽 피연산자로 나눕니다. |
B / A는 2를 줌 |
| % (나머지) |
왼쪽 피연산자를 오른쪽 피연산자로 나누고 나머지를 반환합니다. |
B % A는 0을 줌 |
| ++ (증가) |
피연산자 값을 1 증가시킵니다. |
B++는 21을 줌 |
| -- (감소) |
피연산자 값을 1 감소시킵니다. |
B--는 19를 줌 |
관계 연산자
Java 언어에서 지원하는 관계 연산자들은 다음과 같습니다.
변수 A가 10을, 변수 B가 20을 가진다고 가정하면:
| 연산자 |
설명 |
예제 |
| == (같음) |
두 피연산자 값이 같은지 검사, 같으면 조건이 참. |
(A == B)는 거짓. |
| != (다름) |
두 피연산자 값이 같은지 검사, 다르면 조건이 참. |
(A != B)는 참. |
| > (크다) |
왼쪽 피연산자가 오른쪽보다 큰지 검사, 크면 조건이 참. |
(A > B)는 거짓. |
| < (작다) |
왼쪽 피연산자가 오른쪽보다 작은지 검사, 작으면 조건이 참. |
(A < B)는 참. |
| >= (크거나 같음) |
왼쪽 피연산자가 오른쪽보다 크거나 같은지 검사, 맞으면 조건이 참. |
(A >= B)는 거짓. |
| <= (작거나 같음) |
왼쪽 피연산자가 오른쪽보다 작거나 같은지 검사, 맞으면 조건이 참. |
(A <= B)는 참. |
비트 연산자
Java는 여러 비트 연산자를 정의하며, 이는 long, int, short, char, byte 같은 정수 타입에 적용할 수 있습니다.
비트 연산자는 비트 단위로 작동하여 비트별 연산을 수행합니다. a = 60, b = 13이라고 가정하면 이진 형식으로는 다음과 같습니다:
a = 0011 1100
b = 0000 1101
-----------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
다음 표는 비트 연산자들을 나열합니다:
정수 변수 A가 60, 변수 B가 13을 가진다고 가정하면:
| 연산자 |
설명 |
예제 |
| & (비트 AND) |
비트가 양쪽 피연산자 모두에 존재하면 결과에 비트 복사. |
(A & B)는 12(0000 1100) |
| | (비트 OR) |
비트가 어느 한쪽 피연산자에 존재하면 비트 복사. |
(A | B)는 61(0011 1101) |
| ^ (비트 XOR) |
한 피연산자에만 비트가 설정된 경우 비트 복사. |
(A ^ B)는 49(0011 0001) |
| ~ (비트 보수) |
단항 연산자로 비트를 '반전'시키는 효과. |
(~A)는 -61(부호 있는 이진수로 2의 보수 형태에서 1100 0011) |
| << (왼쪽 시프트) |
왼쪽 피연산자 값을 오른쪽 피연산자가 지정한 비트 수만큼 왼쪽으로 이동. |
A << 2는 240(1111 0000) |
| >> (오른쪽 시프트) |
왼쪽 피연산자 값을 오른쪽 피연산자가 지정한 비트 수만큼 오른쪽으로 이동. |
A >> 2는 15(1111) |
| >>> (제로 채우기 오른쪽 시프트) |
오른쪽으로 시프트하고 빈자리를 0으로 채움. |
A >>> 2는 15(0000 1111) |
논리 연산자
다음 표는 논리 연산자들을 나열합니다:
불리언 변수 A가 true, 변수 B가 false를 가진다고 가정하면:
| 연산자 |
설명 |
예제 |
| && (논리 AND) |
논리 AND 연산자. 양쪽 피연산자가 0이 아니면 조건이 참. |
(A && B)는 거짓 |
| || (논리 OR) |
논리 OR 연산자. 두 피연산자 중 어느 하나라도 0이 아니면 조건이 참. |
(A || B)는 참 |
| ! (논리 NOT) |
논리 NOT 연산자. 피연산자의 논리 상태를 반전. 조건이 참이면 거짓으로 만듦. |
!(A && B)는 참 |
대입 연산자
Java 언어에서 지원하는 대입 연산자들은 다음과 같습니다:
| 연산자 |
설명 |
예제 |
| = |
단순 대입 연산자. 오른쪽 피연산자 값을 왼쪽 피연산자에 할당. |
C = A + B는 A + B의 값을 C에 할당 |
| += |
더하기 대입 연산자. 오른쪽 피연산자를 왼쪽에 더하고 결과를 왼쪽에 할당. |
C += A는 C = C + A와 동일 |
| -= |
빼기 대입 연산자. 오른쪽 피연산자를 왼쪽에서 빼고 결과를 왼쪽에 할당. |
C -= A는 C = C - A와 동일 |
| *= |
곱하기 대입 연산자. 오른쪽 피연산자를 왼쪽에 곱하고 결과를 왼쪽에 할당. |
C *= A는 C = C * A와 동일 |
| /= |
나누기 대입 연산자. 왼쪽 피연산자를 오른쪽으로 나누고 결과를 왼쪽에 할당. |
C /= A는 C = C / A와 동일 |
| %= |
나머지 대입 연산자. 두 피연산자로 나머지 구해 왼쪽에 할당. |
C %= A는 C = C % A와 동일 |
| <<= |
왼쪽 시프트 대입 연산자. |
C <<= 2는 C = C << 2와 동일 |
| >>= |
오른쪽 시프트 대입 연산자. |
C >>= 2는 C = C >> 2와 동일 |
| &= |
비트 AND 대입 연산자. |
C &= 2는 C = C & 2와 동일 |
| ^= |
비트 배타적 OR 대입 연산자. |
C ^= 2는 C = C ^ 2와 동일 |
| |= |
비트 포함 OR 대입 연산자. |
C |= 2는 C = C | 2와 동일 |
기타 연산자
조건 연산자 ( ? : )
조건 연산자는 삼항 연산자로도 알려져 있습니다. 이 연산자는 세 개의 피연산자로 구성되며 불리언 표현식 평가에 사용됩니다. 이 연산자의 목적은 변수에 어떤 값을 할당할지 결정하는 것입니다. 연산자는 다음과 같이 작성됩니다:
variable x = (expression) ? value if true : value if false
다음은 예제입니다:
예제
Live Demo
public class Test {
public static void main(String args[]) {
int a, b;
a = 10;
b = (a == 1) ? 20: 30;
System.out.println( "Value of b is : " + b );
b = (a == 10) ? 20: 30;
System.out.println( "Value of b is : " + b );
}
}
이 코드는 다음 결과를 생성합니다:
출력
Value of b is : 30
Value of b is : 20
instanceof 연산자
이 연산자는 객체 참조 변수에만 사용됩니다. 객체가 특정 타입(클래스 타입 또는 인터페이스 타입)인지 검사합니다. instanceof 연산자는 다음과 같이 작성됩니다:
( Object reference variable ) instanceof (class/interface type)
연산자 왼쪽 변수가 참조하는 객체가 오른쪽의 클래스/인터페이스 타입에 대해 IS-A 검사를 통과하면 결과는 true입니다. 예제:
예제
Live Demo
public class Test {
public static void main(String args[]) {
String name = "James";
// name이 String 타입이므로 true 반환
boolean result = name instanceof String;
System.out.println( result );
}
}
이 코드는 다음 결과를 생성합니다:
출력
true
비교 대상 객체가 오른쪽 타입과 할당 호환되면 이 연산자는 여전히 true를 반환합니다. 또 다른 예제:
예제
Live Demo
class Vehicle {}
public class Car extends Vehicle {
public static void main(String args[]) {
Vehicle a = new Car();
boolean result = a instanceof Car;
System.out.println( result );
}
}
이 코드는 다음 결과를 생성합니다:
출력
true
Java 연산자 우선순위
연산자 우선순위는 표현식에서 항의 그룹화를 결정합니다. 이는 표현식이 평가되는 방식에 영향을 줍니다. 어떤 연산자는 다른 연산자보다 높은 우선순위를 가집니다. 예를 들어 곱셈 연산자는 덧셈 연산자보다 높은 우선순위를 가집니다.
예: x = 7 + 3 * 2; 여기서 x에는 20이 아닌 13이 할당됩니다. *가 +보다 높은 우선순위를 가지므로 3 * 2가 먼저 계산되고 7에 더해지기 때문입니다.
여기서 가장 높은 우선순위 연산자가 표 상단에, 가장 낮은 것이 하단에 있습니다. 표현식 내에서 높은 우선순위 연산자가 먼저 평가됩니다.
| 카테고리 |
연산자 |
결합 방향 |
| 후위 | expression++ expression-- | 왼쪽에서 오른쪽 |
| 단항 | ++expression --expression +expression -expression ~ ! | 오른쪽에서 왼쪽 |
| 승법적 | * / % | 왼쪽에서 오른쪽 |
| 가법적 | + - | 왼쪽에서 오른쪽 |
| 시프트 | << >> >>> | 왼쪽에서 오른쪽 |
| 관계 | < > <= >= instanceof | 왼쪽에서 오른쪽 |
| 등가 | == != | 왼쪽에서 오른쪽 |
| 비트 AND | & | 왼쪽에서 오른쪽 |
| 비트 XOR | ^ | 왼쪽에서 오른쪽 |
| 비트 OR | | | 왼쪽에서 오른쪽 |
| 논리 AND | && | 왼쪽에서 오른쪽 |
| 논리 OR | || | 왼쪽에서 오른쪽 |
| 조건 | ?: | 오른쪽에서 왼쪽 |
| 대입 | = += -= *= /= %= ^= |= <<= >>= >>>= | 오른쪽에서 왼쪽 |
다음 단계
다음 장에서는 Java 프로그래밍의 루프 제어에 대해 설명합니다. 다양한 루프 타입과 Java 프로그램 개발에서 이 루프들이 어떻게 사용될 수 있는지, 어떤 목적으로 사용되는지 설명합니다.