Learning
When: 1학년 8월 30일
How:
'이것이 C#이다' 라는 책에서 패턴 매칭이 나왔는데 예제 코드가 어려워서 그 때는 제대로 공부하지 못했고, 최근 다시 공부하게 되었습니다.
Understanding:
- 위치 패턴 : 위치 패턴은 비교할 식을 분해해서 괄호로 묶은 패턴들로 각각 검사하는 패턴입니다.
말로 하면 좀 어려워서 바로 코드로 설명하겠습니다.
아래의 코드는 Player의 구조체의 hp, name 필드를 분해하여 각각 > 10인 관계 패턴과 "방개"인
상수 패턴으로 비교합니다. 그런데 처음 보면 필드의 순서대로 비교하는 것 같기도 하고,
타입에 맞게 비교하는 것 같기도 합니다. 지금의 구조체는 필드가 2개이고 간단한 구조체인데,
방금 말한 방식으로 비교한다면 구조체가 조금만 복잡해져도 저 코드를 쓰지 못하고,
애초에 순서나 분해하지 않을 변수의 유무 등 너무나도 더럽고 불안정한 기능처럼 보입니다.
그래서 필요한 것이 메서드인데, Deconstruct() 라는 메서드를 만들어 원하는 필드를
순서대로 out 키워드를 붙인 매개 변수에 대입하면 반환 형식과 메서드 이름, 매개 변수의 순서와
out 키워드라는 아주 조금의 불편함이 있더라도 안정적이고 깔끔하게 클래스나 구조체를 분해할 수 있습니다.
참고로 튜플은 그냥 선언하기만 하면 됩니다.
internal class Program
{
static void Main(string[] args)
{
Player sT = new();
if (sT is (> 10, "방개"))
{
Console.WriteLine("방개의 체력은 10보다 높습니다.");
}
}
}
public struct Player
{
private int hp;
private string name;
public void Deconstruct(out int hp, out string name)
{
hp = this.hp;
name = this.name;
}
}
Result: 패턴 매칭이 쓰기 어려운 기능인 줄 알았는데, 막상 공부해보니 생각보다 쉽고 유용해서 초반에 배웠다면 좋았을 것 같다는 생각이 들었습니다. (사실 쓰는 것 자체는 간단한데, 튜플이나 switch 식 등이 어려워서 애매한 것 같네요.
'C#' 카테고리의 다른 글
| [C#] 패턴 매칭 (목록 패턴) (0) | 2025.09.01 |
|---|---|
| [C#] 패턴 매칭 (var, 무시) (1) | 2025.08.31 |
| [C#] 패턴 매칭 (관계, 논리) (0) | 2025.08.29 |
| [C#] 패턴 매칭 (프로퍼티, 괄호) (0) | 2025.08.28 |
| [C#] 패턴 매칭 (형식, 선언, 상수) (1) | 2025.08.28 |