❗ 단락회로 평가(Short Circuit Evaluation:SCE)란 간단하게 말하자면 논리 연산자에서 뒤의 연산을 확인할 필요가 없는 경우 연산을 종료해 버리는 방식을 말합니다.
코드를 통해서 살펴보자.
일반적인 논리 연산자 문법을 확인해 봅시다.
System.out.println(ture && false) // 1 => ans: false
System.out.println(false && true) // 2 => ans: false
System.out.println(true || false) // 3 => ans: true
평소에 논리 연산자를 어떻게 확인하는지 생각해 봅시다.
1번의 경우 and 연산자(&&)이기 때문에 앞의 조건과 뒤의 조건이 전부 true인 경우에만 true를 return해주고 나머지의 경우는 false입니다.
게
따라서, 우리는 해당 연산자를 확인할 때 앞의 조건을 확인한 후 true라면 뒤의 조건을 확인합니다.
이때 앞의 조건이 만약 false라면?
2번의 경우 && 연산자인데, 앞의 조건이 false입니다. 즉, 결과는 false로 확정되어 있고, 뒤의 조건은 확인할 필요가 없습니다. 그래서 연산을 끝내버립니다.
이것이 단락회로 평가입니다.
3번의 경우 or 연산자(||)이기 때문에 앞의 조건이 true라서 뒤의 조건이 true이든지, false이든지 상관없이 결과는 true일 것입니다. 따라서 true를 return해줄 것입니다.
좀 더 직관적으로 확인하기 위해서 다음과 같이 확인해 봅시다.
int i = 1;게
int num = 10;
boolean value = ((num = num + i) < 10 && ((i += 5) < 2);
System.out.println(value); // 1
System.out.println(num); // 2
System.out.println(i); // 3
1, 2, 3번의 출력 값이 어떻게 나올까요?
1번의 경우 && 연산자에서 앞의 조건에서 num = 10 + 1
이 수행 되면 11이 되고 10보다 크기 때문에 false일 것입니다. 따라서 value에는 false가 들어가게 되겠죠.
2번의 경우 num은 앞의 조건문에서의 연산때문에 11을 출력하게 될 것입니다.
그렇다면 3번의 경우는?
3번의 경우는 6을 출력하게 될까요?
아닙니다. 단락회로 평가에 의해서 value를 초기화 할때 수행하는 연산에서 앞의 조건문에서 이미 조건문이 끝났기 때문에 뒤의 조건은 실행하지 않은채 종료합니다.
따라서 i는 아무런 연산을 거치지 않았기에 1을 출력하게 됩니다.