Java의 SCE(Short-Circuit Evaluation, 단락 회로 평가)

SCE(Short-Circuit Evaluation, 단락 회로 평가)이란 최단거리 연산을 말한다.

자바는 SCE연산을 수행하는데 아래의 예시를 보면 쉽게 알 수 있다.

public class SCE{
	public static void main(String[] args){
		
		int a = 10;
		int b = 1;
		
		System.out.println("변수 a, b 출력");
		System.out.println("a : " + a);
		System.out.println("b : " + b);
		
		System.out.println("\\n논리 연산자 &&");
		boolean value = ((a = a + 10 ) < 10) && ( ( b = b + 2 ) < 10);
		
 		System.out.println(value);
		System.out.println("a : " + a);
		System.out.println("b : " + b);
		
		System.out.println("\\n논리 연산자 ||");
		value = ((a = a + 10 ) < 10) || ( ( b = b + 2 ) < 10);

		System.out.println(value);
		System.out.println("a : " + a);
		System.out.println("b : " + b);
	}
}
//--==>> 출력 결과
/*
false
20
1
true
30
3
*/

논리 곱 연산자(&&)를 실행 했을 경우는 둘 중에 하나만이라도 false 이면 결과는 언제나 false 이다.

((a = a + 10 ) < 10) 이 연산을 수행한 결과 false 이기에 이후의 연산은 수행하지 않는 것이다.

그래서 b는 연산이 수행되지 않고 여전히 1을 담고 있는 것이다.

 

만약 논리 합 연산자(||)의 경우 

value = ( (a = a + 10) > 10 ) || ( (i = i + 2) < 10 );

이 구문이 실행되었다면, 앞의 항의 결과에서 true가 나오기에 뒤 항의 결과를 평가할 필요가 없기에 그래도 true를 출력하고 i 값은 여전히 1이다.

 

 

정리하자면,

논리 곱(&&)은 두 항의 결과가 모두 true 일때만 true 이고 앞의 항의 결과가 false이면 뒤 항의 결과는 평가하지 않는다.

논리 합(||)은 두 항의 결과가 모두 false 일때만 false 이고 앞의 항의 결과가 true이면 뒤 항의 결과를 평가하지 않는다.

 

 

'Java > Java' 카테고리의 다른 글

자바 객체 배열 복사  (0) 2022.07.29
상속(Java)  (0) 2022.04.27
static 제어자 (Java)  (0) 2022.04.25
클래스 접근 지정자와 생성자 접근 지정자(java)  (0) 2022.04.20
가변 길이 배열 입력매개변수 메서드 (Java)  (0) 2022.04.11