DEV Community

sunj
sunj

Posted on

패턴매칭

  1. 선언 패턴 주어진 식이 특정 형식과 일치하는지를 평가
object foo = 23;

if (foo is int bar)
{
   Console.WriteLine(bar);
}

Enter fullscreen mode Exit fullscreen mode
  1. 형식 패턴 형식 패턴은 선언 패턴과 거의 같은 방식으로 동작 단, 변수 생성 없이 형식 일치 여부만 테스트
object foo = 23;

if (foo is int)
{
   Console.WriteLine(bar);
}

Enter fullscreen mode Exit fullscreen mode
  1. 상수 패턴 식이 특정 상수와 일치하는지를 검사
var GetContryCode = (string nation) => nation switch
{
   "KR" => 82,
   "US" => 1,
   "UK" => 44,
    _ => throw new ArgumentException("Not supported Code")
};

Console.WriteLine(GetContryCode("KR"));
Console.WriteLine(GetContryCode("US"));
Console.WriteLine(GetContryCode("UK"));
Enter fullscreen mode Exit fullscreen mode
  1. 프로퍼티 패턴 식의 속성이나 필드가 패턴과 일치하는지를 검사
class Car
{
   public string Model { get; set; }
   public DateTime ProdoucedAt { get; set; }
}

static string GetNickname(Car car) 
{
   var GenerateMessage = (Car car, string nickname) =>
      $"{car.Model} produced in {car.ProducedAt.Year} is {nickname}";
   if (car is Car { Model : "Mustang", Produced At Year : 1967 })
       return GenerateMessage(car, "Faskback");
   else if (car is Car { Model : "Mustang", Produced At Year : 1976 })
       return GenerateMessage(car, "Cobra II");
   else
       return GenerateMessage(car, "Unknown");
}
Enter fullscreen mode Exit fullscreen mode
  1. 관계 패턴
    관계{ 연산자를 이용하여 입력받은 식을 상수와 비교
    관계 연산자 : >, >=, ==, !=, <, <=

  2. 논리 패턴
    복수의 패턴을 패턴 논리 연산자로 조합

  3. 괄호 패턴
    괄호로 패턴을 감쌈

  4. 위치 패턴
    식의 결과를 분해하고 분해된 값들이 내장된 복수의 패턴과 일치하는지를 검사.
    내장되는 패턴에는 형식패턴, 상수패턴 등 모든 패턴 사용 가능

  5. var 패턴
    null을 포함한 모든 식의 패턴 매칭을 성공시키고, 그 식의 결과를 변수에 할당.
    식의 결과를 임시 변수에 할당한 다음 추가적인 연산을 수행하고자 할때 유용.

var IsPassed = 
   (int[] scores) => scores.Sum() / scores.Length is var average
   && average >= 60;

int[] scores; = { 90, 80, 60, 80, 70 };
Console.WriteLine{$"{string.Join(",", score1)} : Pass : {IsPassed(scores1)}"}; 
int[] scores; = { 90, 80, 59, 80, 70 };
Console.WriteLine{$"{string.Join(",", score1)} : Pass : {IsPassed(scores2)}"}; 
Enter fullscreen mode Exit fullscreen mode
  1. 무시 패턴
    var 패턴 처럼 모든 식과의 패턴 일치 검사를 성공
    단, is 식에서는 사용할 수 없고, switch 식에서만 사용 가능.

  2. 목록 패턴
    배열이나 리스트가 패턴의 시퀀스가 일치하는 지를 검사.
    패턴의 시퀀스는 [] 사이에 패턴의 목록을 입력하여 생성

Top comments (0)