Java - Short Circuit vs Eager Operator


1. Short Circuit ( 쇼트 서킷, 단락 연산 )

  • Short Circuit ( 쇼트 서킷 ) 은 단락 연산이라고 한다.
  • Short Circuit Evolution 이면 이 방법론이고, Short Circuit Operator 라고 하면 그 방법을 실행할 수 있는 연산자를 뜻한다.
  • Short Circuit은 조건문을 비교할 때, 첫 번째 조건이 맞으면 그 이후 조건은 아예 실행조차 하지 않는 것을 의미한다.
    • 다른 말로는 평가하지 않는다고 한다.
        int a = 0; int b = 0;
        if ( a == 0 || ++b > 0 ) {
        System.out.println(b);
        }
      
    • a 가 0 이거나, ++b가 0보다 클 경우 안의 코드를 실행한다. 이는 둘 중 하나만 만족하면 된다는 의미이다.
    • 그런데 a가 0이라는 조건을 만족했다. 그러면 안의 결과는 어떻게 나올까?
    • ++b가 있으니까 1일까?
    • 정답은 0이다.
    • 왜냐하면 a == 0을 만족했기 때문에 ++b > 0은 아예 실행조차 되지 않은 것이고, 즉 ++b가 되지 않은 것이다.
    • 이게 바로 쇼트 서킷이다.
    • 반대로 &&도 마찬가지이다. 첫번째 조건이 만족되지 않는다면, 두 번째 조건은 실행하지 않고 if문을 통과해버린다.
    • 이러한 쇼트 서킷의 연산자로는 &&과 ㅣㅣ이 있다.



2. Eager Operator

  • Eager Operator는 Short Circuit과는 반대로 모든 조건을 평가하는 것을 말한다.
      int a = 0; int b = 0;
      if ( a == 0 | ++b > 0 ) {
         System.out.println(b);
      }
    
    • 해당 예시 코드에서는 ㅣㅣ 대신 ㅣ를 사용하였다.
    • 이럴 경우 쇼트 서킷 평가가 적용되지 않기 때문에, b는 1로 출력이 된다.
    • 이러한 Eager Operator 로는 &와 ㅣ 이 있다.
  • &와 ㅣ는 자바에서 비트 연산자이면서도, 이러한 특수 경우에는 논리연산자로 쓰이기도 한다.






results matching ""

    No results matching ""