티스토리 뷰
A?.b()
null 조건 연산자 (?.): 객체가 null인지 확인하고 null이 아니면 메서드나 속성을 호출합니다.
- 사용 이유: null 참조 예외를 방지하고 코드 가독성을 향상시킵니다.
- 이벤트 처리기에서 유용함: 이벤트에 구독자가 있는지 확인하고 안전하게 호출할 수 있습니다.
이 연산자를 사용하면 코드가 더 간결해지고, null 참조 예외로 인한 오류를 방지할 수 있습니다.
----------------------------------------------------------------------
X = A ?? B
null 병합 연산자 (??): a ?? b 표현식은 a가 null이 아니면 a를 반환하고, null이면 b를 반환합니다.
----------------------------------------------------------------------
1. Null 조건 연산자(?.)
- PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
- PropertyChanged가 null이 아닌 경우에만 Invoke 메서드를 호출합니다.
- PropertyChanged가 null이면 Invoke 메서드는 호출되지 않고, 예외도 발생하지 않습니다.
이 연산자는 이벤트 처리기에서 특히 유용합니다. 이벤트에 구독자가 없는 경우 이벤트 델리게이트는 null일 수 있으므로, null 조건 연산자를 사용하면 null 참조 예외를 피할 수 있습니다.
예제: Null 조건 연산자 사용
다음은 null 조건 연산자를 사용한 코드 예제입니다:
위 코드는 PropertyChanged 이벤트에 구독자가 있는지 확인하고, 구독자가 있을 때만 이벤트를 호출합니다.
Null 조건 연산자 없이 동일한 동작 구현
null 조건 연산자를 사용하지 않고 동일한 동작을 구현하려면 다음과 같이 작성해야 합니다:
이 코드에서는 PropertyChanged 이벤트 델리게이트를 로컬 변수 handler에 할당한 후, handler가 null인지 확인하고, null이 아니면 이벤트를 호출합니다.
-------------------------------------------------------------
2. Null 병합 연산자(??)
_execute = execute ?? throw new ArgumentNullException(nameof(execute));
execute가 null인지 확인하고
1. execute가 null이 아니면 _execute에 execute를 할당합니다.
2. execute가 null이면 ArgumentNullException을 던집니다.