푸터 콘텐츠로 바로가기
Iron Academy Logo
C# 배우기
C# 배우기

다른 카테고리

C# 스위치 표현식 설명: Tim Corey의 실용적인 가이드

Tim Corey
9분 16초

C# 개발에서 깔끔하고 유지보수하기 쉬운 코드를 작성하는 것은 중요한 목표입니다. 이러한 목표 달성에 도움이 되는 최신 C# 기능 중 하나는 기존의 switch 문을 대체하는 간결하고 강력한 switch 표현식입니다. 종종 간과되지만, 스위치 표현식은 특히 관계형 패턴, 패턴 매칭 및 상수 패턴을 다룰 때 복잡한 분기 논리를 단순화합니다.

이 기능이 어떻게 작동하고 기존 방식과 어떻게 다른지 더 잘 이해하기 위해 Tim Corey의 유용한 비디오를 함께 살펴보겠습니다. Tim은 " C#에서의 switch 표현식 "이라는 제목의 영상에서 C#에서 switch 표현식을 실제로 어떻게 사용하는지 분석하고, 더 적은 줄로 더 나은 코드를 작성하는 방법을 보여줍니다.

이제 Tim의 실용적인 설명을 자세히 살펴보겠습니다. 이 설명은 채점 예시로 시작하여 인터페이스, 타입 패턴, 객체 평가를 활용한 고급 시나리오까지 다룹니다.

전통적인 if-else 문과 switch 문 비교

Tim은 numberGrade라는 정수형 변수에 85와 같은 시험 점수를 저장하는 콘솔 애플리케이션으로 시작합니다. 목표는 이 숫자 입력값을 'B'와 같은 해당 문자 등급으로 변환하는 것입니다. 대부분의 경우 개발자는 다음과 같이 일련의 if-else 문이나 switch 문을 사용합니다.

if (numberGrade >= 90)
    letterGrade = "A";
else if (numberGrade >= 80)
    letterGrade = "B";
// ...and so on
if (numberGrade >= 90)
    letterGrade = "A";
else if (numberGrade >= 80)
    letterGrade = "B";
// ...and so on

이 방법은 효과적이지만, 장황하다. 반면 C#의 switch 표현식은 더 깔끔한 구문을 제공합니다.

채점을 위한 스위치 표현식 작성하기

스위치 표현식을 설명하기 위해 Tim은 위의 논리를 다음 코드를 사용하여 다시 작성했습니다.

string letterGrade = numberGrade switch
{
    >= 90 => "A",
    >= 80 => "B",
    >= 70 => "C",
    >= 60 => "D",
    _ => "F"
};
string letterGrade = numberGrade switch
{
    >= 90 => "A",
    >= 80 => "B",
    >= 70 => "C",
    >= 60 => "D",
    _ => "F"
};

여기서 switch 키워드는 새로운 맥락, 즉 문장이 아닌 표현식으로 사용됩니다. 즉, 해당 값은 직접 평가되어 변수(예: letterGrade)에 할당될 수 있습니다.

이 형식은 관계형 패턴(예: >= 90)을 지원하며, 마지막 else와 동일한 기본 사례를 처리하기 위해 무시 패턴(_)을 사용합니다.

팀은 컴파일러가 런타임에 각 조건을 위에서 아래로 확인하여 입력에 맞는 첫 번째 패턴을 선택함으로써 일치하는 부분을 결정한다고 언급합니다.

표현식을 사용하여 코드 간소화

팀의 말에 따르면, 이 새로운 구문은 "상당수의 코드를 대체"합니다. else if로 조건을 반복하는 대신, switch 표현식은 명확하고 간결한 구조로 모든 것을 처리합니다. 이렇게 하면 제어 흐름이 단순화되고 가독성이 향상되며 논리의 중복이 줄어듭니다.

그는 이러한 구조가 특히 입력값을 특정 출력값(예: 성적 평가, 상태 메시지 또는 데이터 변환)에 매핑할 때 유용하다고 강조합니다.

객체 유형과 함께 패턴 매칭 사용하기

타입 패턴과 패턴 매칭을 살펴보기 위해 Tim은 IAnimal 인터페이스와 관련된 시나리오를 제시합니다. 그는 인터페이스를 구현하는 세 가지 클래스(개, 고양이, 소)를 정의합니다. 이를 통해 그는 각기 다른 특성을 가진 동물 목록을 만들 수 있습니다.

interface IAnimal { }

record Dog(string Name) : IAnimal;
record Cat(string Title, string Name) : IAnimal;
record Cow(string Breed) : IAnimal;
interface IAnimal { }

record Dog(string Name) : IAnimal;
record Cat(string Title, string Name) : IAnimal;
record Cow(string Breed) : IAnimal;

그는 다양한 동물 객체들을 목록에 추가하고, 타입 패턴 매칭을 사용하여 객체 유형을 식별하고 데이터를 추출하는 방법을 보여줍니다.

패턴 매칭을 사용한 스위치 표현식

Tim은 if 문을 사용하여 다음 코드를 보여줍니다.

if (a is Dog d)
    message = $"Dog: {d.Name}";
else if (a is Cat c)
    message = $"Cat: {c.Title} {c.Name}";
else if (a is Cow co)
    message = $"Cow: {co.Breed}";
else
    message = "Unknown animal";
if (a is Dog d)
    message = $"Dog: {d.Name}";
else if (a is Cat c)
    message = $"Cat: {c.Title} {c.Name}";
else if (a is Cow co)
    message = $"Cow: {co.Breed}";
else
    message = "Unknown animal";

훨씬 더 간결하고 읽기 쉬운 스위치 표현식으로 대체할 수 있습니다.

string message = a switch
{
    Dog d => $"Dog: {d.Name}",
    Cat c => $"Cat: {c.Title} {c.Name}",
    Cow co => $"Cow: {co.Breed}",
    _ => "Unknown animal"
};
string message = a switch
{
    Dog d => $"Dog: {d.Name}",
    Cat c => $"Cat: {c.Title} {c.Name}",
    Cow co => $"Cow: {co.Breed}",
    _ => "Unknown animal"
};

이 표현식은 객체의 유형을 확인하고 일치하는 패턴에 따라 올바른 출력을 적용합니다. 일치하는 항목이 없으면 discard _를 사용하여 기본 결과로 되돌아갑니다.

이 기능은 명확성을 희생하지 않고 기능성을 향상시킵니다. 실행 시 동작은 예측 가능하고 읽기 쉬운 상태로 유지됩니다.

when 키워드를 사용한 선택적 가드

Tim의 예시에서는 보여주지 않았지만, switch 표현식에 when 키워드를 추가하여 선택적인 부울 조건을 적용할 수 있다는 점을 알아두는 것이 중요합니다.

int score = 90;

string result = score switch
{
    int s when s >= 90 && s <= 100 => "Excellent",
    int s when s >= 75 => "Good",
    _ => "Needs Improvement"
};
int score = 90;

string result = score switch
{
    int s when s >= 90 && s <= 100 => "Excellent",
    int s when s >= 75 => "Good",
    _ => "Needs Improvement"
};

여기서 when 절을 사용하면 더 복잡한 부울 표현식을 사용하여 인수를 사용자 지정 방식으로 평가할 수 있습니다.

모범 사례 및 최종 의견

Tim은 중요한 개념을 강조합니다. switch 문을 사용하면 코드가 더 간결해지지만, 간결하다고 해서 항상 더 좋은 것은 아니라는 것입니다. 때로는, 특히 논리가 복잡하거나 입력값이 불분명한 경우에는 전통적인 switch 문이나 if 블록이 더 적절할 수 있습니다.

모든 경우에 switch 문을 사용할 필요는 없습니다. 상황에 맞는 적절한 도구를 사용하세요. 이건 팀이 농담으로 말하는 "트랜스젠더 숭배 집단"에 가입하는 것에 관한 이야기가 아닙니다. 시스템에서 유지보수하기 쉽고 이해하기 쉬운 코드를 작성하는 것에 관한 것입니다.

요약: 개발자 도구 상자에 switch 표현식 추가하기

C#의 switch 식은 상수, 관계형 및 형식 패턴을 조합하여 입력 패턴에 따라 값을 평가하고 반환하는 현대적이고 깔끔한 방법을 제공합니다. 논리를 단순화하고, 상투적인 코드를 줄이고, 가독성을 향상시키려는 경우에 이상적입니다.

팀 코리의 영상 에 나오는 다음 예시들은 정수 등급 매기기부터 동물 객체 식별에 이르기까지, 이러한 도구들의 실용적인 활용법을 보여줍니다. 결과를 계산하는 함수를 만들거나, 사용자 입력을 처리하거나, null 및 정의되지 않은 경우를 다룰 때, switch 표현식을 사용하면 시간을 절약하고 오류를 줄이며 코드베이스를 더 쉽게 관리할 수 있습니다.

팀이 말했듯이, "코드를 더 간결하고 깔끔하게 만들면서도 이해하기 쉽게, 혹은 그 이상으로 만들어주는 데 정말 유용한 도구입니다."

C# 코드 품질을 향상시키고 .NET Core 혁신을 따라잡고 싶다면 switch 표현식을 건너뛰지 마세요. 직접 사용해 보고, Visual Studio 프로젝트에서 실험해 보고, 로직이 얼마나 깔끔해지는지 확인해 보세요.

Hero Worlddot related to C# 스위치 표현식 설명: Tim Corey의 실용적인 가이드
Hero Affiliate related to C# 스위치 표현식 설명: Tim Corey의 실용적인 가이드

사랑하는 것을 공유하여 더 많은 수익을 얻으세요

당신은 .NET, C#, Java, Python, 또는 Node.js를 다루는 개발자를 위한 콘텐츠를 만드나요? 당신의 전문성을 추가 수입으로 전환하세요!

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해