자바에는 AND 연산자에는 & 와 &&가 있다. OR 연산자 또한 | 와 || 가 있다.
이번에 해당 연산자들로 인해 서비스에 장애가 생기는 문제가 발생하였다.
&, &&, |, || 연산자의 차이를 간단하게 알아보고자 한다.
크게 & 와 | 는 비트 연산자이고 && 과 || 는 논리 연산자이다.
- & 와 | 는 먼저 검증하는 결과의 결과와 무관하게 뒤에 검증하는 내용을 검증한다.
- && 는 먼저 검증하는 결과가 거짓이라면 더 이상 뒤의 내용은 검증하지 않는다.
- || 는 먼저 검증하는 결과가 참이라면 더 이상 뒤의 내용은 검증하지 않는다.
아래는 테스트를 위한 테스트 코드이다.
public class OperatorTrainingTest {
private static boolean operate(String message, boolean result) {
log.info("message: {}, result: {}", message, result);
return result;
}
@Test
void andOperatorTest() {
log.info("& Test");
if (operate("조건 1", Boolean.FALSE) & operate("조건 2", Boolean.FALSE)) {
log.info("& Test Succeed");
}
log.info("&& Test");
if (operate("조건 1", Boolean.FALSE) && operate("조건 2", Boolean.FALSE)) {
log.info("&& Test Succeed");
}
log.info("| Test");
if (operate("조건 1", Boolean.TRUE) | operate("조건 2", Boolean.TRUE)) {
log.info("| Test Succeed");
}
if (operate("조건 1", Boolean.TRUE) || operate("조건 2", Boolean.TRUE)) {
log.info("|| Test succeed");
}
}
}
출력 결과는 아래와 같다.
& Test
message: 조건 1, result: false
message: 조건 2, result: false
&& Test
message: 조건 1, result: false
| Test
message: 조건 1, result: true
message: 조건 2, result: true
| Test Succeed
message: 조건 1, result: true
|| Test succeed