숏서킷(short-circuit)

Jeonghwa·2023년 1월 23일
0

숏서킷(short-circuit)

Java의 논리 연산자에서 논리 표현식의 평가(evaluation)가 완료되기전 종료되는 경우를 숏서킷이라고 한다.
평가(evaluation)가 완료되기 전에도 결과가 명확하기 때문에 결과가 반환되어 숏서킷이 일어난다.
이는 불필요한 작업(뒤에 남은 연산)을 피하고 효율적인 처리로 이어진다.


AND(&&) 숏서킷

AND의 경우 하나의 거짓 결과를 얻을 때 까지 표현식의 평가가 이루어진다. (뒤의 추가조건과 관계없이 항상 거짓이기 때문에)
따라서 &&(논리적 AND)가 있는 표현식이 있고, 첫번 째 피연산자 결과가 false라면 숏서킷이 발생하고 이후 표현식은 평가되지 않는다.
예시

public class ShortCirAnd {
    public static void main(String[] args) {
        // 첫 번째 피연산자가 false이므로 평가가 중지되고 false가 반환된다.
        // short-circuit O
        if (false && true && true) {
            System.out.println("This output "
                    + "will not "
                    + "be printed");
        }
        else {
            System.out.println("This output "
                    + "got printed actually, "
                    + " due to short circuit");
        }

        // 마지막 조건까지 false가 발생하지 않기 때문에 전체 표현식이 평가된다.
        // short-circuit X
        if (true && true && true) {
            System.out.println("This output "
                    + "gets print"
                    + " as there will be"
                    + " no Short circuit");
        }
        else {
            System.out.println("This output "
                    + "will not "
                    + "be printed");
        }
    }
}

결과

This output got printed actually,  due to short circuit
This output gets print as there will be no Short circuit

OR(||) 숏서킷

OR의 경우 하나의 참 결과를 얻을 때 까지 표현식의 평가가 이루어진다. (뒤의 추가조건과 관계없이 항상 참이기 때문에)
따라서 ||(논리적 OR)가 포함된 표현식이 있고, 첫번 째 피연산자 결과가 true라면 숏서킷이 발생하고 이후 표현식은 평가되지 않는다.
예시

public class ShortCirOr {
    public static void main(String[] args) {
        // 첫 번째 피연산자가 true이므로 평가가 중지되고 true가 반환된다.
        // short-circuit O
        if (true || false || false) {
            System.out.println("This output "
                    + "got printed actually, "
                    + " due to short circuit");
        }
        else {
            System.out.println("This output "
                    + "will not "
                    + "be printed");
        }

        // 마지막 조건까지 true가 발생하지 않기 때문에, 전체 표현식이 평가된다.
        // short-circuit X
        if (false || false || true) {
            System.out.println("This output "
                    + "gets print"
                    + " as there will be"
                    + " no Short circuit");
        }
        else {

            System.out.println("This output "
                    + "will not "
                    + "be printed");
        }
    }
}

결과

This output got printed actually,  due to short circuit
This output gets print as there will be no Short circuit

참고 : geeksforgeeks - Short Circuit Logical Operators in Java with Examples


면접에서의 숏서킷

숏서킷을 좋아하니? 라는 질문을 면접에서 많이들 물어본다고한다.
좋아하는 사람도 있고 싫어하는 사람도 있지만, 결론적으로 빨리 끝나기 때문에 많은 사람이 선호한다고 한다.

숏서킷에는 아래와 같은 장점이 있다.

  • 쓸데없이 메모리를 오래 들고있지 않고 바로 결과를 반환해버리기 때문에 빠르게 Stack을 비울 수 있다.
  • 앞의 피연산자 결과에 따라 뒤의 피연산자를 실행하면 안되는 경우 유용하게 사용할 수 있다.
    if( a=!null && a.equals(somevalue){
    	doSomething();
    }
profile
backend-developer🔥

0개의 댓글