글 작성자: 취업중인 피터팬
728x90
기본 환경
JDK : 1.8.0_261 버전
JRE : 1.8.0_261 버전
JAVA VERSION : 8 업데이트 261
Eclipse IDE VERSION : 2020-06버전

 

목표

자바의 SCE를 이해한다.

SCE를 통해 가독성 있는 코드가 무엇인지 이해한다.


코드
package ex03operator;

public class E05ShortCircuitEvaluation {
	
	/*
	 SCE(Short-Circuit Evaluation)
	 		: 하나의 조건검사만으로 결과를 알수 있는 경우 Java컴파일러는 
	 		뒤에 조건을 수행하지 않고 건너뛰게 된다. 이경우 변수의 값이
	 		변경되는 코드가 있다면 실행되지 않으므로 주의해야한다.
	 */

	public static void main(String[] args) {
		int num1 = 0, num2 = 0;
		boolean result;
		/*
		 &&(논리and)의 경우 둘중 하나만 false이면 false를 반환하므로
		 첫번째 조건이 false이면 두번째 조건을 실행(검사)하지 않는다.
		 */
		result = (num1 += 10) < 0 && (num2 += 10) > 0;
		System.out.println("result ="  + result);
		System.out.println("num1 ="  + num1 + "  num2 = " + num2);
		
		/*
		 ||(논리or)의 경우 둘중 하나만 true 이면 true를 반환하므로
		 첫번째 조건이 true이면 뒷문장을 실행하지 않는다.
		 */
		result = (num1 += 10) > 0 || (num2 += 10) > 0;
		System.out.println("result ="  + result);
		System.out.println("num1 ="  + num1 + "  num2 = " + num2);
		
		/*
		 num2 는 초기값이 0을 유지하게 된다. 만약 num2의 값이 프로그램에
		 영향을 미치게 된다면 이 부분은 유의해야한다.
		 */
		
	}

}

 앞에서 했던 논리 연산자와 이어지는 내용이다. SCE란 자바가 코드를 컴파일 할 때 AND논리 일경우 앞이 false일 경우 뒤를 검사하지 않고 OR연산자도 마찬가지로 앞이 True이면 뒤를 검사하지 않는것이다. 앞에 코드처럼 검사하는 부분의 연산식을 넣을 경우 개발자가 원하는 결과와 다른 결과가 나올 수 있음을 유의하자

 

결과 값

다음 결과 값을 보면 논리 연산자에서 계산한 결과가 적용되지 않았음을 볼 수 있다.