switch문위키백과는 switch문을 "변수나 표현식의 값에 따라 프로그램의 제어 흐름을 바꿀 수 있게 해 주는, 일종의 선택 제어 구조"라고 설명해요.
이 구조에는 다음과 같은 키워드가 쓰여요: switch, case, break, default.
가장 단순한 형태에서는 원시 타입이나 문자열 표현식을 검사하고, 그 값을 바탕으로 결정을 내려요. 예를 들어 볼까요?
string direction = GetDirection();
switch (direction)
{
case "left":
GoLeft();
break;
case "right":
GoRight();
break;
default:
MarkTime();
break;
}
가장 정교한 형태에서는 다운캐스팅 case <Type> <variable>:과 가드(when)를 함께 사용해요.
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;
}
축구 클럽 웹사이트의 직원들이 경기를 보고할 수 있도록 돕는 시스템을 개발하고 있어요. 이 시스템은 경기장 안팎에서 일어나는 경기의 여러 측면을 분석해서 이벤트 스트림으로 변환해요.
이 팀은 오직 4-3-3 포메이션으로만 경기하고, 교체 선수를 허용한 1965년 규칙 변경에도 동의한 적이 없어요. 선수단 규모를 늘리는 건 말할 것도 없고요.
선수 설명은 다음과 같아요:
1 -> "goalie"
2 -> "left back"
3 & 4 -> "center back"
5 -> "right back"
6, 7 & 8 -> "midfielder"
9 -> "left wing"
10 -> "striker"
11 -> "right wing"
등번호를 기준으로 선수 설명을 출력하도록 정적 메서드 PlayAnalyzer.AnalyzeOnField()를 구현해요.
PlayAnalyzer.AnalyzeOnField(10);
// => "striker"
1~11 범위를 벗어난 등번호가 들어오면 UNKNOWN을 보고하도록 PlayAnalyzer.AnalyzeOnField() 메서드를 수정해요.
경기장 주변의 활동과 인물에 대한 설명을 출력하도록 PlayAnalyzer.AnalyzeOffField() 메서드를 구현해요.
이 메서드는 여러 유형의 데이터를 받는데, 그 데이터를 분석해서 기자들에게 도움이 되는 알맞은 텍스트로 변환해야 해요.
먼저 경기장에 관한 데이터부터 살펴볼게요.
int)string)알 수 없는 유형의 데이터는 처리하면 안 되므로, 메서드가 다른 유형의 데이터를 받으면 빈 문자열을 반환해야 해요.
PlayAnalyzer.AnalyzeOffField(5000);
// => "There are 5000 supporters at the match."
PlayAnalyzer.AnalyzeOffField("5 minutes to go!");
// => "5 minutes to go!"
PlayAnalyzer.AnalyzeOffField(0.5);
// => ""
경기 중에 일어나는 사건에 대한 설명을 출력하도록 PlayAnalyzer.AnalyzeOffField() 메서드를 수정해요.
사건은 Incident 타입의 하위 클래스라면 무엇이든 될 수 있고, 사건에 대한 설명을 담고 있어요.
부상은 경기를 중단시키기 때문에 특별한 종류의 사건이고, 따라서 다르게 처리해야 해요.
PlayAnalyzer.AnalyzeOffField(new Foul());
// => "The referee deemed a foul."
PlayAnalyzer.AnalyzeOffField(new Injury(8));
// => "Oh no! Player 8 is injured. Medics are on the field."
경기장에 있는 클럽 감독을 언급하도록 PlayAnalyzer.AnalyzeOffField() 메서드를 수정해요.
감독은 Manager 타입의 인스턴스이고, 이름과 자신이 맡고 있는 클럽의 이름을 가지고 있어요.
감독의 클럽은 알 수 없을 수도 있는데, 이 경우 null로 설정돼요.
감독의 클럽을 알 수 없다면, 그 클럽은 설명에 포함되지 않아야 해요.
PlayAnalyzer.AnalyzeOffField(new Manager("José Mário dos Santos Mourinho Félix", null));
// => "José Mário dos Santos Mourinho Félix"
PlayAnalyzer.AnalyzeOffField(new Manager("Jürgen Klopp", "Liverpool"));
// => "Jürgen Klopp (Liverpool)"
Exercism에 가입하고 C# 트랙을 개념 62개연습 문제 178개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.