더북(TheBook)

출력 결과는 대체로 간단하지만, 마지막 줄의 출력 결과에 사뭇 놀랄 수도 있다.

Input is string hello
Input is long 5
Input didn't match hello, long 5 or int 10
Input is int 10
Input didn't match hello, long 5 or int 10

정숫값을 비교할 때 ==을 사용한다면 Match(10L)은 왜 매칭되지 않았을까? 그 이유는 input의 컴파일 타임 타입이 정수 타입이 아니기 때문이다. 따라서 컴파일러는 object.Equals(x, 10)을 호출하는 코드를 생성하게 된다. 이제 마지막 Match 메서드를 호출했을 때처럼 xInt32가 아니라 Int64로 박싱되면 결괏값은 false가 된다. ==이 사용되도록 하려면 다음과 같이 코드를 작성하면 된다.

long x = 10L;
if (x is 10)
{
    Console.WriteLine("x is 10");
}

하지만 is를 이와 같이 사용하는 것은 전혀 유용하지 않다. 이와 같이 정수 상수를 사용해야 한다면 switch 문(사전-패턴-매칭 switch 문)을 사용하는 것이 훨씬 유용하다. 역시 가장 유용한 패턴은 타입 패턴이 아닌가 싶다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.