switch 식
간결하게 값을 반환하는 switch를 배워 보세요.
switch 식은(는) CoddyKit의 무료 C# Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C# Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
스위치 식이란 무엇인가요
스위치 식은 입력값을 일련의 패턴과 비교하여 값을 반환합니다. 기존 스위치 문과 달리 식이므로, 결과를 할당하거나 반환할 수 있습니다.
값 뒤에 switch 키워드를 사용하고, 분기를 pattern => result 형식으로 작성합니다. 따라서 분기 로직을 간결하고 함수형으로 표현할 수 있습니다.
int code = 2;
string name = code switch
{
1 => "One",
2 => "Two",
_ => "Other"
};
System.Console.WriteLine(name);문과 식 비교
기존 스위치 문은 case 레이블과 break를 사용합니다. 새로운 스위치 식에서는 이러한 키워드를 모두 생략합니다.
분기는 쉼표로 구분하고 전체 식은 세미콜론으로 끝냅니다. 또한 각 분기는 다음 분기로 넘어가는 블록을 실행하는 대신 값을 생성합니다. 따라서 중단문을 빠뜨려 발생하는 버그를 줄일 수 있습니다.
// Statement style
switch (code) { case 1: result = "One"; break; }
// Expression style
result = code switch { 1 => "One", _ => "?" };폐기 분기
밑줄 _은 폐기 패턴입니다. 무엇이든 일치하며 기본 경우로 동작합니다.
스위치 식은 모든 경우를 다루어야 합니다. 실행 시 일치하는 분기가 없으면 SwitchExpressionException이 발생합니다. _ 분기를 추가하면 가능한 모든 입력값에 대해 일치가 보장됩니다.
using System;
class Program {
static void Main() {
int n = 7;
string size = n switch {
< 5 => "small",
_ => "big"
};
Console.WriteLine(size);
}
}상수 패턴
가장 간단한 분기는 상수 패턴을 사용합니다. 이는 입력값을 같음 비교로 비교하는 리터럴 값입니다.
상수에는 숫자, 문자열, 문자, 열거형 멤버 또는 명명된 상수가 사용될 수 있습니다. 위에서 아래 순서로 평가되므로, 더 구체적이거나 더 자주 사용되는 분기를 먼저 배치하세요.
char grade = 'B';
string label = grade switch
{
'A' => "Excellent",
'B' => "Good",
'C' => "Fair",
_ => "Needs work"
};
System.Console.WriteLine(label);메서드에서 반환하기
스위치 식은 메서드 안에서 특히 유용합니다. 전체 구문이 식이므로 return으로 직접 반환할 수 있으며, 흔히 한 줄짜리 식 본문 메서드로 작성할 수 있습니다.
이렇게 하면 변환 로직이 본문 전체의 if/else if 연쇄에 흩어지지 않고 읽기 쉽게 한곳에 모입니다.
using System;
class Program {
static string Day(int d) => d switch {
0 => "Sun", 6 => "Sat", _ => "Weekday"
};
static void Main() => Console.WriteLine(Day(6));
}열거형으로 전환하기
열거형은 스위치 식과 자연스럽게 함께 사용할 수 있습니다. 각 분기에서 열거형 멤버의 이름을 지정하며, 폐기 분기를 생략하면 컴파일러가 누락된 경우를 경고할 수 있습니다.
그래도 향후 열거형 값이 추가되었을 때 실행 시 앱이 중단되지 않도록 _ 분기를 유지하는 것이 좋습니다.
using System;
enum Light { Red, Yellow, Green }
class Program {
static void Main() {
Light l = Light.Green;
string action = l switch {
Light.Red => "Stop",
Light.Yellow => "Slow",
Light.Green => "Go",
_ => "?"
};
Console.WriteLine(action);
}
}조건을 사용한 가드 절
when 가드는 분기에 부울 조건을 추가합니다. 패턴과 가드가 모두 참일 때만 해당 분기가 일치합니다.
이를 사용하면 패턴만으로는 표현할 수 없는 임의의 로직으로 일치 조건을 세밀하게 조정할 수 있습니다. 예를 들어 범위 확인을 다른 변수와 결합할 수 있습니다.
int temp = 30;
string weather = temp switch
{
int t when t < 0 => "Freezing",
int t when t < 20 => "Cool",
_ => "Warm"
};
System.Console.WriteLine(weather);순서가 중요합니다
분기는 소스 코드에 작성된 순서대로 확인됩니다. 처음 일치하는 분기가 선택되므로 더 구체적인 패턴을 더 포괄적인 패턴보다 앞에 배치해야 합니다.
일반적인 분기가 구체적인 분기보다 앞에 있으면 컴파일러가 뒤의 분트를 도달할 수 없는 코드로 보고합니다. 분기를 위에서 아래로, 좁은 범위에서 넓은 범위로 확장되는 깔때기처럼 읽어 보세요.
int score = 95;
string tier = score switch
{
>= 90 => "Gold",
>= 70 => "Silver",
_ => "Bronze"
};
System.Console.WriteLine(tier);모든 경우를 다루기와 예외
모든 입력값이 포함되지 않고 일치하는 분기도 없으면 실행 시 System.Runtime.CompilerServices.SwitchExpressionException이 발생합니다.
컴파일러가 모든 경우를 다룬다고 증명할 수 없으면 CS8509 경고를 표시합니다. 이 경고를 심각하게 받아들이세요. 누락된 값을 포함하거나 폐기 분기를 추가하여 식이 모든 경우에 값을 제공하도록 하세요.
using System;
class Program {
static void Main() {
try {
int x = 5;
string s = x switch { 1 => "a", 2 => "b" };
Console.WriteLine(s);
} catch (Exception e) {
Console.WriteLine(e.GetType().Name);
}
}
}여러 입력값 결합하기
둘 이상의 값을 기준으로 전환하려면 값을 튜플로 묶으세요. 그러면 각 분기에서 튜플 패턴을 사용하여 각 위치를 비교하게 됩니다.
결과가 두 요소에 따라 달라지는 상태 머신이나 의사 결정표에 적합한 방법입니다. 이후 수업에서 튜플 패턴을 자세히 살펴보겠습니다.
bool isWeekend = true; bool isRaining = false;
string plan = (isWeekend, isRaining) switch
{
(true, false) => "Go hiking",
(true, true) => "Watch a movie",
_ => "Work"
};
System.Console.WriteLine(plan);읽기 쉬운 식 본문
스위치 식은 LINQ 및 식 본문 멤버와 잘 결합되어 간결한 처리 흐름을 만들어 냅니다.
각 분기가 값을 반환하므로 스위치 식을 Select 프로젝션 내부나 메서드 인수로 직접 사용할 수 있어 임시 변수가 필요하지 않습니다.
using System;
using System.Linq;
class Program {
static void Main() {
var nums = new[] { 1, 2, 3 };
var labels = nums.Select(n => n switch {
1 => "one", 2 => "two", _ => "many"
});
Console.WriteLine(string.Join(",", labels));
}
}빠른 확인
스위치 식에 대한 이해도를 확인해 보세요.
복습
스위치 식은 쉼표로 구분된 분기를 사용하는 input switch { pattern => result, ... } 형식으로 값을 반환합니다.
기본 경우에는 _를, 가드에는 when을 사용하고 분기가 위에서 아래 순서로 확인된다는 점을 기억하세요. 실행 시 예외를 피하려면 모든 경우를 빠짐없이 다루어야 합니다. 다음으로 형식 패턴과 속성 패턴을 살펴보겠습니다.
자주 묻는 질문
“switch 식” 강의는 무료인가요?
네 — “switch 식” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C# Academy 강의 전체를 잠금 해제할 수 있습니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“switch 식”에서 뭘 배우나요?
간결하게 값을 반환하는 switch를 배워 보세요. 브라우저에서 직접 실행하는 실습 코드로 C# Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C# Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C# Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“switch 식” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C# Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C# Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- switch 식
- 형식 및 속성 패턴
- 관계형 및 논리 패턴
- 목록 및 튜플 패턴