트랙
/
C#
C#
/
학습 과정
/
`switch`문
`s

`switch`문 에서 C#

2개의 연습 문제

`switch`문 소개

switch문은 프로그래밍 언어에서 유서 깊은 역사를 지니고 있어요. 처음에는 C에서 도입되었고, 속도가 빠르다는 점에서 높이 평가받았어요. 그런데 그 속도는 기능이 크게 제한적이라는 대가를 치르고 얻은 것이었어요. C#에서는 switch문의 역할이 정수를 넘어 확장되었어요. switch문은 임의의 타입, 값, 참조를 모두 아우를 수 있어요.

함수형 언어에서 오셨다면, switch문(그리고 다른 곳에서 다루는 switch 식)을 다루는 것이 C#에서 판별 공용체와 패턴 매칭을 사용하는 것에 가장 가까이 다가가는 방법이에요. 하지만 타입 안전성을 강제하는 판별 공용체의 힘에는 턱없이 못 미쳐요.

단순한 switch문은 switch, case, break, default를 조합한다는 점에서 C 시절의 조상과 닮아 있어요.

int direction = GetDirection();
switch (direction)
{
    case 1:
        GoLeft();
        break;
    case 2:
        GoRight();
        break;
    default:
        MarkTime();
        break;
}

위 패턴은 모든 단순한(원시 형식 + 문자열) 타입에 사용할 수 있어요.

여기에 참조 형식이 섞이면 추가 문법이 필요해요. 먼저 타입을 다운캐스트하고, 그다음 가드(when)를 추가하는 거예요. 물론 가드는 단순한 값 case에도 사용할 수 있어요. 아래에 예시가 있어요.

Animal animal = GetAnimal();

switch(animal)
{
    case Dog canine:
    case Coyote canine:
        canine.Bark();
        break;
    case Cat cat when cat.HasOnly8Lives():
        cat.IsCareful();
        cat.Meow();
        break;
    case Cat cat:
        cat.Meow();
        break;
}
  • default 절은 선택 사항이지만, 대개 있는 편이 좋아요.
  • 비어 있지 않은 case 절에는 break문이 반드시 필요해요.
  • 당연히 case 레이블에 전달하는 모든 인자의 타입은 switch 인자의 타입에서 파생되어야 해요. Object 타입의 switch 인자는 당연히 가장 넓은 범위를 허용하죠.
  • 가드 식에는 case 인자의 멤버뿐만 아니라 스코프 안의 어떤 것이든 포함할 수 있어요.
  • 서로 다른 case 인자를 가진 여러 case가 같은 코드 블록을 가리킬 수 있어요.

switch문 문서에서 switch문에 대한 소개를 볼 수 있어요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요

`switch`문 배우기

연습이 잠겨 있어요

`switch`문 개념을 연습하려면 연습 문제 6개를 더 잠금 해제해요