[객체지향] 2.C# 최신 문법과 기능 활용, switch 표현식과 패턴 매칭

C#은 현재 소프트웨어 개발에서 매우 인기가 높고 강력한 프로그래밍 언어입니다. 특히, C#의 최신 버전에서는 많은 기능이 추가되어
개발자들이 코드 작성 시 더 효율적으로 작업할 수 있게 해줍니다. 이 글에서는 C#의 최신 문법과 기능 중, 특히 switch 표현식과
패턴 매칭에 대해 자세히 알아보겠습니다.

1. switch 표현식 소개

switch 표현식은 C# 8.0에서 도입된 기능으로, 기존의 switch 문보다 더욱 간결하고 명확한 문법을 제공합니다. 이 표현식은
조건에 따라 값을 반환하며, 결과를 변수에 할당할 수 있는 장점이 있습니다. 기본적인 구문은 다음과 같습니다.

C#
// switch 표현식의 기본 예제
int number = 2;
string result = number switch
{
    1 => "하나",
    2 => "둘",
    3 => "셋",
    _ => "기타" // 기본(default)값
};
Console.WriteLine(result); // 출력: 둘

1.1. switch 표현식의 장점

switch 표현식은 가독성이 뛰어나며, 코드가 간결해져서 유지보수하기 쉬운 장점이 있습니다. 또한, 각 케이스에서 반환할 값을
바로 정의할 수 있으므로, 기존의 switch 문보다 코드 흐름을 이해하기 쉬워집니다.

2. 패턴 매칭

C# 7.0부터 도입된 패턴 매칭은 객체의 형을 검사하고, 일치하는 형에 따라 작업을 수행할 수 있게 합니다. 이는 코드의 유연성과
가독성을 높이는 데 기여합니다. 패턴 매칭은 여러형으로 나누어 사용할 수 있으며, 여기에서는 switch 표현식 내에서
어떻게 활용될 수 있는지 살펴보겠습니다.

2.1. 기본 패턴 매칭

C#
// 기본 패턴 매칭 예제
object obj = "Hello";
string message = obj switch
{
    string s when s.StartsWith("H") => "H로 시작하는 문자열입니다.",
    int i => "정수입니다: " + i,
    _ => "알 수 없는 타입입니다."
};
Console.WriteLine(message); // 출력: H로 시작하는 문자열입니다.

2.2. 더 복잡한 패턴 사용

C#의 패턴 매칭은 타입 패턴, 값 패턴, 널 패턴 등을 지원합니다. 이러한 패턴은 복잡한 조건을 명확하게 표현할 수 있게 해줍니다.
아래 예제를 살펴봅시다.

C#
// 다양한 패턴 매칭 예제
object data = new List { 1, 2, 3 };

string resultPattern = data switch
{
    int[] arr => $"정수 배열입니다. 길이: {arr.Length}",
    List list when list.Count > 0 => $"정수 리스트입니다. 첫 번째 요소: {list[0]}",
    _ => "알 수 없는 데이터 타입입니다."
};
Console.WriteLine(resultPattern); // 출력: 정수 리스트입니다. 첫 번째 요소: 1

3. switch 표현식과 패턴 매칭의 결합

switch 표현식과 패턴 매칭은 함께 사용되어 훨씬 강력한 기능을 발휘할 수 있습니다. 코드의 가독성을 높이고, 유지보수성을
향상시키는 데 큰 도움이 됩니다. 다음은 이 두 가지 기능을 결합한 예제입니다.

C#
// switch 표현식과 패턴 매칭의 결합 예제
object dataObject = 42;
string resultCombined = dataObject switch
{
    int n when n > 0 => $"{n}는 양수입니다.",
    int n when n < 0 => $"{n}는 음수입니다.",
    null => "값이 없습니다.",
    _ => "알 수 없는 타입입니다."
};
Console.WriteLine(resultCombined); // 출력: 42는 양수입니다.

4. 결론

C#의 최신 문법과 기능, 특히 switch 표현식과 패턴 매칭을 활용하면 더욱 간결하고 가독성이 높은 코드를 작성할 수 있습니다.
이러한 기능들은 개발자들이 더 적은 코드로 더 많은 일을 할 수 있도록 도와주며, 현대 소프트웨어 개발의 요구 사항에
잘 부합합니다. 실제 프로젝트에서 이러한 기능을 사용함으로써 코드의 구조를 개선하고, 개발 생산성을 높이는 데
기여할 수 있습니다. C#을 사용하는 모든 개발자들에게 이러한 기능들을 적극적으로 활용해 보기를 권장합니다.

참고 자료