Section 8.4: Null 조건부 연산자를 Extension Method 와 함께 사용하기

본디 Extension Method 자체가 null reference 에 대해서도 동작하게 되어 있으나, ?. 을 이용하여 null 체크를 하는 것 역시 가능하다.

public class Person { public string Name { get; set; } } public static class PersonExtensions { public static int GetNameLength(this Person person) { return person == null ? -1 : person.Name.Length; } }

보통은, 이 메소드가 null reference 에 대해서 불리는 경우 -1 값을 반환하게 될 것이다:

Person person = null; int nameLength = person.GetNameLength(); // -1 을 반환한다.

?. 을 이용하면 이 메소드가 null reference 에 대해서는 불리지 않을 것이며, 반환 타입은 int? 이 될 것이다:

Person person = null; int? nameLength = person?.GetNameLength(); // nameLength 는 null 이 된다.

이러한 결과는 사실 ?. 연산자가 동작하는 방식으로부터 충분히 예상 가능하다: NullReferenceException 이 발생되는 것을 피하기 위해, null instance 에 대해서는 instance method 호출을 피하도록 되어 있기 때문이다.

그러나, method 의 선언 방식에 대해서만 차이가 있을 뿐, 사실 동일한 회피 로직은 extension method 에 대해서도 적용되어 있다.

첫번째 예제에서 어떠한 이유로 extension method 가 호출이 되고 있는지에 대한 추가 정보를 확인하고 싶다면, "Section 48.2 Extension method - null 체크하기" 문서를 참고하라.

본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

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

반응형

+ Recent posts