52. string 에 대한 switch 문의 컴파일러 변환 (해시 점프 vs 순차 비교)

난이도 중 해설 보기 →

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

결함 코드 · C#
// 주제: string 에 대한 switch 문의 컴파일러 변환 (내부 동작)
//
// 과제:
//   1) 아래 RouteFew(2개 케이스)와 RouteMany(8개 케이스)를 C# 컴파일러가
//      각각 어떤 IL 로 낮추는지(lowering) 예측하라. 케이스 수에 따라 전략이
//      어떻게 달라지는가?
//   2) string switch 의 비교는 어떤 규칙(문화권/대소문자/서수)을 따르는가?
//      "ROUTE" 와 "route" 는 같은 케이스로 가는가?
//   3) 케이스가 많을 때 내부적으로 무엇이 생성되며, 왜 그것이 O(1) 에 가까운
//      디스패치를 주는지 설명하라. null 입력은 어떻게 처리되는가?

using System;

public static class OpcodeRouter
{
    public static int RouteFew(string op) => op switch
    {
        "move"   => 1,
        "attack" => 2,
        _        => 0,
    };

    public static int RouteMany(string op) => op switch
    {
        "move"    => 1,
        "attack"  => 2,
        "cast"    => 3,
        "loot"    => 4,
        "trade"   => 5,
        "chat"    => 6,
        "party"   => 7,
        "logout"  => 8,
        _         => 0,
    };
}
내 리뷰 · C#
내 답안 · 자동 저장

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