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가 나올 가능성이 높은 피연산자를 왼쪽에 놓아야 더 빠른 로직을 구현할 수 있다.
// 아래 코드의 결과를 확인하여 SCE가 무엇인지 확인한다.
int i = 10;
int j = 0;
while(i-->0 || j++<10)
    System.out.printf("%d, %d\n",  i, j);

+ Recent posts