논리 연산자의 피연산자는 반드시 boolean 타입이어야 하며, 연산 결과 또한 boolean 타입이다.
| 연산자 | 논리곱/합 | 설명 |
|---|---|---|
&& 또는 & |
AND (논리곱) | 두 피연산자가 모두 true일 때만 true 반환 |
\|\| 또는 \| |
OR (논리합) | 두 피연산자가 모두 false일 때만 false 반환 |
^ |
XOR (배타적 논리합) | 두 피연산자가 서로 다를 때만 true 반환 |
! |
NOT (논리 부정) | true를 false로, false를 true로 반전 |
&& (Short-circuit AND): 앞의 조건이 false이면, 바로 false를 확정|| (Short-circuit OR): 앞의 조건이 true이면, 바로 true를 확정만약 뒤쪽 조건에 에러가 발생할 만한 코드(예: null 체크 등)가 있다면, 단락 평가를 통해 프로그램의 비정상 종료를 막을 수 있다.
String str = null;
// 만약 단락 평가가 없다면 str.length()에서 NullPointerException 발생
if (str != null && str.length() > 0) {
System.out.println("문자열이 존재함");
}
&& vs &, || vs | 의 차이&와 |는 단락 평가를 하지 않는다.
&를 사용하면 앞이 false여도 뒤쪽 조건을 끝까지 계산한다.&&와 ||를 사용한다.자바 21에서 논리 연산자는 조건부 가드(when 절)와 결합하여 더욱 강력하게 쓰인다.
// Java 21 예시
static String test(Object obj) {
return switch (obj) {
case String s when s.length() > 5 && s.startsWith("A") -> "A로 시작하는 긴 문자열";
case String s -> "짧은 문자열";
default -> "문자열 아님";
};
}
&&는 모두 참일 때 참, ||는 하나만 참이어도 참이다.()를 적절히 써서 가독성과 우선순위를 챙기자.