3.5 논리 연산자 (Logical Operator)
비교 연산의 결과나 논리값을 결합하여 더 복잡한 조건을 구성할 때 사용합니다. boolean 형(true/false)을 피연산자로 삼습니다.
1. 논리 연산자 (&&, ||)
&&(AND, 그리고): 두 피연산자 양쪽 모두true일 때만 결과값이true가 됩니다. 둘 중 하나라도false면false를 리턴합니다.||(OR, 또는): 두 피연산자 중 한 쪽만true라도 결과가true입니다. 모두false일 때만false를 리턴합니다.
int x = 5;
// x가 0보다 크고(AND) 10보다 작다.
boolean result1 = (x > 0) && (x < 10); // true
// x가 0 미만이거나(OR) 10 초과이다.
boolean result2 = (x < 0) || (x > 10); // false
효율적인 연산 (Short Circuit Evaluation)
자바의 논리 연산은 식을 평가할 때 좌측에서 우측으로 넘어갑니다.
||연산의 경우: 좌측 피연산자가true이면, 이미 전체 결과가true로 확정되므로 우측 식을 평가 (실행)조차 하지 않습니다.&&연산의 경우: 좌측 피연산자가false이면, 우측 조건의 참거짓 여부와 관계없이 거짓이므로 우측 식을 무시합니다.
따라서 빠른 실행을 위해, 연산 결과가 높은 확률로 판가름 나는 조건을 논리 연산의 좌측에 두는 것이 유리합니다.
2. 삼항 연산자 (? :)
삼항 연산자는 세 개의 피연산자를 필요로 하는 유일한 연산자로 주로 if문을 대신하여 짧게 표시할 때 쓰입니다. 조건식이 참일 때와 거짓일 때 반환되는 결과값이 다릅니다.
(조건식) ?(조건식이 true일 때 반환할 값) :(조건식이 false일 때 반환할 값)
int x = 10, y = 5;
// x가 y보다 크면 x의 값을 반환, 작으면 y의 값을 반환
int max = (x > y) ? x : y;
System.out.println(max); // 출력결과 10
삼항 연산자를 사용하면 코드를 간결하게 만들 수 있으나, 중첩하여 과도하게 사용할 경우 가독성이 오히려 떨어지게 되므로, 복잡한 곳에는 if - else 블록을 사용하는 것이 좋습니다.