Short-Circuit Evaluation
2019. 12. 18. 14:41
Short-Circuit Evaluation
- SCE를 다루기에 앞서 자바의 논리 연산자를 생각해보자.
- 논리 연산자에는 AND(&&) 연산과 OR(||) 연산이 있다.
- 논리 연산자는 피연산자로 boolean 타입 또는 boolean 타입의 값을 결과로 하는 조건식을 취할 수 있다.
- && 연산이 || 연산보다 우선순위가 높으므로, 함께 사용할 때 괄호를 적절히 사용해야 한다.
AND( && ) 연산
- 피연산자가 양쪽 모두 참이면 true를 반환한다.
OR( || ) 연산
- 피연산자 중 한쪽이 참이면 true를 반환한다.
x | y | x || y | x && y |
true | true | true | true |
true | false | true | false |
false | true | true | false |
false | false | false | false |
SCE
- 조금만 생각해보면 && 연산에서 왼쪽 피연산자의 조건이 false이면 오른쪽 연산은 볼 필요가 없다는 것을 알 수 있다.
- 마찬가지로 ||연산에서 왼쪽 피연산자의 조건이 true이면 어차피 전체 식은 true 이므로 오른쪽의 연산을 확인할 필요가 없다.
- 즉, 왼쪽의 인자가 전체 식의 값을 결정하기에 충분하지 않은 경우에만 오른쪽의 인자를 평가한다.
- 더 나아가 논리식이라도 피연산자의 위치에 따라서 연산 속도가 달라질 수 있다.
- && 연산의 경우, 연산 결과가 false가 나올 가능성이 높은 피연산자를 왼쪽에 놓아야 더 빠른 로직을 구현할 수 있다.
- 마찬가지로 ||연산에서 왼쪽 피연산자의 조건이 true이면 어차피 전체 식은 true 이므로 오른쪽의 연산을 확인할 필요가 없다.
// 아래 코드의 결과를 확인하여 SCE가 무엇인지 확인한다.
int i = 10;
int j = 0;
while(i-->0 || j++<10)
System.out.printf("%d, %d\n", i, j);
'# Programming Language > Java' 카테고리의 다른 글
[JAVA] 제너릭 메소드(Generic Method) 설명 및 예제 (0) | 2020.01.03 |
---|---|
java.util.Date vs java.sql.Date (1) | 2019.12.18 |