C#/C# 교과서

[C# 교과서] 62. 모던 C#

서니션 2023. 2. 11. 18:42
728x90
반응형

패턴 매칭

패턴과 값이 일치하는지 테스트해서 일치한다면 새로운 변수에 대입

 

<패턴 매칭을 if문으로 표현>

  • 코드 : if (shape is Rectangle r)
  • 의미 : 만약 shape 변수 값이 Rectangle 클래스와 패턴이 맞는다면 Rectangle 형식의 r 변수에 저장
using System;

namespace PatternMatchingIf
{
    class Shape { }

    class Rectangle : Shape
    {
        public string Name { get; set; } = "사각형";
    }

    class PatternMatchingIf
    {
        static void Main() => ShowShape(new Rectangle());

        static void ShowShape(Shape shape)
        {
            // [1] if 구문을 사용한 패턴 매칭
            if (shape is Rectangle r)
            {
                Console.WriteLine(r.Name);
            }
        }
    }
}

실행 결과 > 사각형

 

Main() 메서드가 시작되고  ShowShape() 메서드에 매개변수로 Rectangle 클래스의 인스턴스를 넘김

이를 받는 ShowShape() 메서드의 shape 변수는 그 패턴(성질)이 Shape 클래스와 일치하기에 1의 r 변수에 담겨 사용

 

ShowShape() 메서드에는 Rectangle 클래스의 인스턴스가 전달될 때만 if문이 실행

 

<패턴 매칭을 switch문으로 표현>

using System;

namespace PatternMatchingSwitch
{
    class Shape { }

    class Rectangle : Shape { }

    class Circle : Shape { }

    class PatternMatchingSwitch
    {
        static void Main()
        {
            ShowShape(new Circle());        // 원
            ShowShape(new Rectangle());     // 사각형
        }

        static void ShowShape(Shape shape)
        {
            switch (shape)
            {
                case Circle s:
                    Console.WriteLine("원");
                    break;
                case Rectangle r:
                    Console.WriteLine("사각형");
                    break;
            }
        }
    }
}

실행 결과 >

원 : 반지름(10)

직사각형 : 20 x 10

정사각형 : 10 x 10

728x90
반응형