Posts C# - 간단한 트릭 - 널 체크
Post
Cancel

C# - 간단한 트릭 - 널 체크

Note


1
2
3
4
5
6
7
8
9
public class MyClass
{
    public int[] dataArray;

    public bool IsEmpty()
    {
        return dataArray == null || dataArray.Length == 0;
    }
}

위와 같이 내부에 간단한 배열을 담고 있는 클래스가 있다.

1
2
3
MyClass m = null;

Console.WriteLine(m.IsEmpty());

그리고 위와 같이 객체가 null인 상태에서 인스턴스 메소드를 호출하면

당연히 NullReferenceException이 발생한다.


그런데 데이터의 유효성 검사만 확인하면 되고, 이 검사가 매우 빈번한 경우에

매번 m != null && !m.IsEmpty() 이런 식으로 검사하는 것은 다소 지저분해 보일 수 있다.

이런 경우 사용할 수 있는 간단한 트릭이 있다.


확장 메소드

1
2
3
4
5
6
7
8
9
10
11
12
public static class MyClassExtension
{
    public static bool IsNull(this MyClass @this)
    {
        return @this == null; // 또는 @this is null
    }

    public static bool IsNullOrEmpty(this MyClass @this)
    {
        return IsNull(@this) || @this.IsEmpty();
    }
}

이렇게 MyClass를 위한 정적 클래스를 정의하고, 확장 메소드를 작성한다.

확장 메소드는 m.IsNull()과 같이 인스턴스 메소드인 것처럼 호출할 수 있지만

실제로는 MyClassExtension.IsNull(m)의 형태로 정적 메소드로서 동작한다.

따라서 호출 주체가 null이어도 호출할 수 있으며,

위에서 언급한 m != null && !m.IsEmpty()의 경우

이제 !m.IsNullOrEmpty()와 같이 깔끔하게 작성할 수 있다.

This post is licensed under CC BY 4.0 by the author.