Section 3.5: 단락 평가 (Short-circuiting) 연산자

정의상으로 볼 때, 단락 평가 (short-circuiting) boolean 연산자는 첫번째 연산자가 전체 표현식 (expression) 의 결과를 결정지을 수 없는 경우에만 두번째 연산자의 실제 평가가 이루어지게 (evaluate) 된다.

다시말하면, 사용자가 && 연산자를 firstCondition && secondCondition 의 형태로 사용했다고 할 때, secondConditionfirstConditiontrue 인 경우에만 실제 평가가 이루어 지게 되며, 당연하게도 firstOperandsecondOperand 가 모두 true 로 평가될때만 전체 결과 역시 true 가 됨을 의미한다. 이는 여러 상황에서 유용하게 사용될 수 있는데, 예를 들어 list 가 세개 이상의 요소 (element) 를 가지고 있는지를 확인하여야 하는 상황에서, NullReferenceException 이 발생하는 상황을 피하기 위해 list 자체가 초기화가 되었는지도 확인이 필요한 상황을 가정해 보자. 이러한 경우, 아래와 같은 방법을 사용할 수 있다:

bool hasMoreThanThreeElements = myList != null && mList.Count > 3;

mList.Count > 3 조건 확인은 myList != null 조건이 만족하기 전까지는 수행되지 않을 것이다.

논리 AND 연산

&& 는 일반적인 boolean AND (&) 연산에 대응되는 단락 평가 (short-circuiting) 연산자이다.

var x = true; var y = false; x && x // true 를 반환한다. x && y // false 를 반환한다 (y 값이 평가된다). y && x // false 를 반환한다 (x 값이 평가되지 않는다). y && y // false 를 반환한다 (오른쪽 y 값은 평가되지 않는다).

Logical OR

|| 는 일반적인 boolean OR (|) 연산에 대응되는 단락 평가 (short-circuiting) 연산자이다.

var x = true; var y = false; x || x // true 를 반환한다 (오른쪽 x 값은 평가되지 않는다). x || y // true 를 반환한다 (y 값이 평가되지 않는다). y || x // true 를 반환한다 (x 와 y 값이 평가된다). y || y // false 를 반환한다 (두 y 값이 모두 평가된다).

사용 예제

if(object != null && object.Property) // object 가 null 인 경우 단락 평가 (short circuit) 로 인해 object.Property 는 절대 사용(access) 되지 않는다. Action1(); else Action2();
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

+ Recent posts