[Java] 단락회로평가

AND와 OR 논리연산자에서 단락회로평가

조건문에서 많이 쓰이는 AND와 OR 논리연산자를 오류 없이 사용하기 위해서는 단락 회로 평가를 알고 있어야 합니다.
Java뿐만 아니라 논리연산자를 사용하는 다른 프로그래밍 언어에서도 쓰이는 개념이며, 연산 속도의 효율을 위해 나온 방법입니다.
크게 어려운 내용은 아니고, (a) && (b)라는 AND 논리연산자가 있을 땐 (a)와 (b)가 모두 true 여야 true를 반환하기 때문에,
(a)가 false라면 (b)가 true던 false던 상관없이 (a) && (b)는 false를 반환하므로, (a)가 false라면 (b)를 확인하지 않습니다.
반대로, (a) || (b)에서는 (a)가 true라면 무조건 (a) || (b)도 true이기 때문에,
OR 논리연산자에서는 (a)가 true라면 (b)를 확인하지 않습니다.
어려운 내용은 아니지만, 논리연산자에서 뒤에 나오는 (b)를 확인하지 않는다는 건, (b) 안에서 연산이 있어도, 그 연산을 처리하지 않는다는 것입니다.
그러므로 (b)의 연산이 이루어지지 않는다는 것을 모르면 의도한 것과 다른 결과가 나오기 때문에 사소한 오류가 생길 수 있으므로, 단락 회로 평가를 알아야 됩니다.
연산이 안되는 경우에 대해서 예제를 통해 구현해보았습니다.

예제

package basic;

public class ShortCircuitPractice {

	public static void main(String[] args) {
		 //논리 and와 or 연산자에서의 단락회로평가(Short Circuit Evaluation) 테스트
		int numOne = 10;
		int numTwo = 20;
		boolean cheakAnd= (++numOne<10) && (++numTwo<20);
		System.out.println(cheakAnd); // false 출력
		System.out.println("numOne:"+numOne+" numTwo:"+numTwo); // numOne:11 numTwo:20 출력
		// ++numTwo는 실행되지 않았다. ((++numOne<10)이 false이기 때문에 끝까지 연산하지 않는다.)
		numOne = 10;
		boolean cheakOr= (++numOne>10) || (++numTwo>20);
		System.out.println(cheakOr);
		System.out.println("numOne:"+numOne+" numTwo:"+numTwo); // numOne:11 numTwo:20 출력
		// ++numTwo는 실행되지 않았다. ((++numOne>10)이 true이기 때문에 끝까지 연산하지 않는다.)
	}

}