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 |