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#
내 답안 · 자동 저장
작성 후 위 해설 보기에서 모범 해설과 대조하세요.