0Pricing
C# Academy · 강의

switch 식과 when을 사용한 모든 경우 검사(C# 6 에뮬레이션)

기존 switch-반환 메서드로 switch 식을 에뮬레이션하고, 보호 검사를 추가하며, 처리되지 않은 경우를 실행 중 발견하도록 default에서 예외를 던집니다.

switch 식과 when을 사용한 모든 경우 검사(C# 6 에뮬레이션)은(는) CoddyKit의 무료 C# Academy 강의입니다. 이것은 3개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C# Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C# Academy 강의에는 총 3개의 강의가 포함되어 있습니다.

계획: switch 흉내 내기

목표: C# 6에서 최신 switch 식을 흉내 냅니다.

  • 기존 switch에서 값 반환하기
  • 가드로 사전 확인하기
  • 모든 경우를 처리하기 위해 default throw로 즉시 실패하기

값을 반환하는 switch

스위치가 값을 반환하면 스위치 식처럼 동작합니다. 기본값에서 예외를 발생시키는 처리가 알 수 없는 값을 처리합니다.

using System;

public enum Grade { A, B, C, D, F }

public class Program
{
  static string Describe(Grade g)
  {
    switch (g)
    {
      case Grade.A: return "Excellent";
      case Grade.B: return "Good";
      case Grade.C: return "Average";
      case Grade.D: return "Below average";
      case Grade.F: return "Fail";
      default: throw new ArgumentOutOfRangeException("g");
    }
  }

  public static void Main(string[] args)
  {
    Console.WriteLine(Describe(Grade.A));
    Console.WriteLine(Describe(Grade.F));
  }
}

가드를 통한 조건 분기

가드 검사(조건문)를 사용하여 조건절을 흉내 냅니다. 먼저 입력을 검증한 다음 범위에 따라 분기합니다.

using System;

public class Program
{
  // Emulate: switch(score) { case var s when s >= 90: ... } using pre-guards
  static string LabelScore(int score)
  {
    if (score < 0 || score > 100) throw new ArgumentOutOfRangeException("score");

    if (score >= 90) return "A";
    if (score >= 80) return "B";
    if (score >= 70) return "C";
    if (score >= 60) return "D";
    return "F";
  }

  public static void Main(string[] args)
  {
    Console.WriteLine(LabelScore(92)); // A
    Console.WriteLine(LabelScore(77)); // C
  }
}

모든 경우 처리를 위한 도우미

작은 Exhaustive.Unhandled 도우미를 추가하고 기본값 분기에서 호출합니다. 새로운 열거형 값이 처리되지 않으면 테스트가 실패합니다.

using System;

public enum Status { New, Active, Closed }

public static class Exhaustive
{
  public static Exception Unhandled(object x)
  {
    return new InvalidOperationException("Unhandled case: " + x);
  }
}

public class Program
{
  static int ToHttp(Status s)
  {
    switch (s)
    {
      case Status.New: return 201;
      case Status.Active: return 200;
      case Status.Closed: return 410;
      default: throw Exhaustive.Unhandled(s);
    }
  }

  public static void Main(string[] args)
  {
    Console.WriteLine(ToHttp(Status.Active)); // 200
  }
}

가드 + 종류별 스위치 분기

사전 가드로 각 분기의 데이터를 검증한 다음 판별자에 따라 스위치로 분기합니다. 이는 각 경우에 조건절을 적용하는 방식과 같습니다.

using System;

public enum ShapeKind { Circle, Square }

public sealed class Shape
{
  public ShapeKind Kind;
  public double Radius; // for circle
  public double Side;   // for square
}

public class Program
{
  static double Area(Shape s)
  {
    if (s == null) throw new ArgumentNullException("s");

    // “when” guards (validate needed fields)
    if (s.Kind == ShapeKind.Circle && s.Radius < 0) throw new ArgumentException("Radius must be >= 0");
    if (s.Kind == ShapeKind.Square && s.Side < 0) throw new ArgumentException("Side must be >= 0");

    switch (s.Kind)
    {
      case ShapeKind.Circle: return Math.PI * s.Radius * s.Radius;
      case ShapeKind.Square: return s.Side * s.Side;
      default: throw new InvalidOperationException("Unhandled shape: " + s.Kind);
    }
  }

  public static void Main(string[] args)
  {
    Shape c = new Shape { Kind = ShapeKind.Circle, Radius = 2.0 };
    Console.WriteLine("Area circle = " + Area(c));
  }
}

팁과 주의점

팁:

  • 작고 값을 반환하는 메서드를 우선 사용합니다(단일 책임).
  • 누락된 경우를 조기에 드러내도록 기본값에서 예외를 발생시키는 처리를 유지합니다.
  • 스위치 앞에 가드를 배치합니다. 가드는 조건절처럼 동작합니다.

모든 경우 처리 에뮬레이션

빠른 확인: C# 6에서 조건절을 사용하는 스위치 식과 비슷하게 모든 경우의 스위치 처리를 구현하려면 어떻게 해야 합니까?

복습

복습: 일반적인 스위치에서 스위치 식처럼 값을 반환하고, 조건절을 위한 가드를 추가하며, 누락된 경우를 드러내도록 기본값에서 예외를 발생시키는 처리를 유지합니다.

자주 묻는 질문

“switch 식과 when을 사용한 모든 경우 검사(C# 6 에뮬레이션)” 강의는 무료인가요?

네 — “switch 식과 when을 사용한 모든 경우 검사(C# 6 에뮬레이션)” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C# Academy 강의 전체를 잠금 해제할 수 있습니다. C# Academy 강의에는 총 3개의 강의가 포함되어 있습니다.

“switch 식과 when을 사용한 모든 경우 검사(C# 6 에뮬레이션)”에서 뭘 배우나요?

기존 switch-반환 메서드로 switch 식을 에뮬레이션하고, 보호 검사를 추가하며, 처리되지 않은 경우를 실행 중 발견하도록 default에서 예외를 던집니다. 브라우저에서 직접 실행하는 실습 코드로 C# Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

C# Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 C# Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 3개 중 2번째 강의입니다.

“switch 식과 when을 사용한 모든 경우 검사(C# 6 에뮬레이션)” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 C# Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 C# Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. is 패턴과 관계·논리 패턴(C# 6 에뮬레이션)
  2. switch 식과 when을 사용한 모든 경우 검사(C# 6 에뮬레이션)
  3. 판별 합집합을 활용한 도메인 모델링(record)(C# 6 에뮬레이션)
← C# Academy(으)로 돌아가기