39. 패턴 매칭(is / switch 식)의 내부 동작

난이도 상 해설 보기 →

결함을 모두 찾고 원인·수정안·더 나은 설계를 제시하라. 마커 (A)(B) 는 주목 위치 힌트다.

결함 코드 · C#
// 주제: 패턴 매칭(is / switch 식)의 내부 동작.
//   - 형식 패턴(type pattern), 상수 패턴(constant), 관계 패턴(relational: > < 등),
//     논리 패턴(and/or/not), 속성 패턴(property), null 처리, 값 형식 언박싱.
//
// 과제:
//  1) 아래 프로그램의 출력을 정확히 예측하라(각 줄).
//  2) object 로 받은 값에 형식 패턴을 적용할 때 언박싱이 어떻게 일어나는지,
//     switch 식의 '패턴 순서'가 결과에 어떻게 영향을 주는지 설명하라.
//  3) 상수 패턴 0 과 관계 패턴 > 100, 논리 패턴(and), when 절 가드의 차이를 설명하라.

using System;

class Program
{
    static string Classify(object o) => o switch
    {
        null               => "null",
        int and > 100      => "big-int",     // 형식 + 관계 패턴을 and로 결합
        int n when n < 0   => "neg-int",     // when 절 가드
        0                  => "zero",        // 상수 패턴(박싱된 int 0)
        int                => "small-int",   // 위에서 안 걸린 나머지 int
        string { Length: 0 } => "empty-str", // 속성 패턴
        string s           => $"str:{s.Length}",
        _                  => "other"
    };

    // is 패턴 + 논리 결합
    static bool IsSmallPositive(object o) => o is int and > 0 and < 10;

    static void Main()
    {
        object[] xs = { null, 200, -5, 0, 50, "", "hello", 3.14 };
        foreach (var o in xs)
            Console.WriteLine(Classify(o));

        Console.WriteLine(IsSmallPositive(5));
        Console.WriteLine(IsSmallPositive(50));
        Console.WriteLine(IsSmallPositive("x"));
    }
}
내 리뷰 · C#
내 답안 · 자동 저장

작성 후 위 해설 보기에서 모범 해설과 대조하세요.