C#/C# 교과서
[C# 교과서] 62. 모던 C#
서니션
2023. 2. 11. 18:42
패턴 매칭
패턴과 값이 일치하는지 테스트해서 일치한다면 새로운 변수에 대입
<패턴 매칭을 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