키보드워리어

【자바】Boolean - 단축평가 논리연산자 본문

JAVA/입문

【자바】Boolean - 단축평가 논리연산자

꽉 쥔 주먹속에 안경닦이 2022. 11. 25. 21:25
728x90

Short-Circuit and Lazy evaluation

논리 연산자 중에서

 그렇다면 &&를 쓰는 것과일반 &차이는 무엇일까요?

 

아래 그림을 통해 살펴보시죠

논리연산자 short-circuit
논리연산자 &&와 &차이

표현식을 살펴보시면 참, 거짓 유무를 따지지 않고 실행한다면 변수 i의 경우는 11이 되어야 합니다.

하지만 실행되지 않았죠? 그 이유는 첫 번째 표현식이 false였기 때문입니다.

 

논리 연산자 {A && B}에서 A -> B 순으로 계산하여 최종적으로 마지막 평가도 이뤄지지 않았습니다.

 

요령을 피운다고 생각하면 될 거 같습니다.

 

그래서 이러한 문법을

Short-Circuit Evaluation (간단한 평가) 또는 lazy evaluation(나태한 평가)로 불립니다.

 

논리 연산자 &를 하나만 쓴다면?

그런데 논리 연산자를 두 개 쓰는 게 아니라 1개를 쓴다면 말이 달라집니다.

논리연산자 &를 하나만 쓴다면?
논리연산자 &를 하나만 쓴다면?

and연산자의 또 다른 버전인 &는 게으른 평가를 하지 않습니다.

 

두 피연산자를 항상 평가하는 것이 &으로 하나라도 참이라면 나머지 하나는 실행됩니다.

 

그래서

왼쪽 j연산자는 그대로 false값을 출력하지만 i값은 10으로 5보다 크기 때문에 11로 출력된 것을 확인해볼 수 있습니다.

 

비슷하게, 논리 연산자 or도 마찬가지입니다. ||를 쓴다면 나태한 평가를, |를 유일하게 한 개만 쓴다면

or 연산자 뒤에 나오는 식도 하나씩 다 체크하게 됩니다.

 

주의!) 로직을 실행할 때 단축 회로 평가에만 의존하는 것은 좋지 않습니다.

 단축 회로를 많이 쓰는 것은 가독성을 낮추게 합니다. 그 말인즉슨 소프트웨어의 버그도 찾기가 어려워지죠. 그것은 명백하게 코드 유지에 부담을 주는 일입니다.

 

 로직을 구분할 때 단축 회로와 일반 싱글 연산자를 혼용하는 건 추천하지 않고 최선의 방법은 i++를 먼저 설정하고 증가한 i값과 비교하기 위해 비교 연산자를 사용해주세요.

 

이것이 코드를 복잡하게 만드는 것보다 낫습니다. 코드는 항상 심플하게 쓰고 부수효과는 없는지 확인하는 것이 좋겠습니다.

728x90