패턴매칭은 어떤 대상이 특정한 패턴을 가지고 있는지를 찾는 방법입니다. 조건을 제시하여 해당 조건에 맞는 객체들을 가져와 사용할 수 있는 방법중에 하나입니다.
예제를 통해 알아보겠습니다!
아래와 같은 조건에서 데이터를 찿을 때 보통 Equals를 사용합니다.
object[] datas = { 1, 3, null, new Student("Hyo", 70) };
foreach (var data in datas)
{
if (data.Equals(1))
Debug.Log("1 입니다");
else if (data.Equals(null))
Debug.Log("null 입니다");
}
c# 7.0 상수 패턴
object[] datas = { 1, 3, null, new Student("Hyo", 70) };
foreach (var data in datas)
{
if (data is 1)
Debug.Log("1 입니다");
else if (data is null)
Debug.Log("null 입니다");
}
is 연산자는 보통 캐스팅을 통해 true/ false를 반환할 때 사용하는데요, 뒤에 상수를 사용하여 사용할 수 있습니다.
이렇게 Equals 대신 상수 패턴으로 사용할 수 있습니다!
c# 7.0 타입 패턴
object[] datas = { 1, 3, null, new Student("Hyo", 70) };
foreach (var data in datas)
{
if (data is Student student)
Debug.Log($"{student.name}, {student.score}");
}
타입 패턴은 파생클래스인지, 인터페이스를 가지고 있는지를 파악할 수 있습니다. 해당 타입이 맞으면 data를 Student 타입으로 변경하여 student에 저장합니다. 따라서 특별한 캐스팅 없이 저장된 변수를 직접 사용할 수 있습니다.
c# 7.0 var 패턴
private void CheckNumber(int num)
{
switch (num)
{
case var _num when _num < 5:
Debug.Log("5 미만의 숫자");
break;
case var _num when _num.Equals(3):
Debug.Log("3인 숫자");
break;
default:
break;
}
}
vsr 패턴은 상수 패턴, 타입 패턴 모두를 포함할 수 있는 장점이 있습니다. 하지만 더 유용하게 쓰는 방법중에 when 키워드와 함께 사용하면 더욱 효율적이고 유용하게 사용할 수 있습니다.
c# 8.0 switch expression
private string GetJob(People people)
{
string job = people switch
{
null => "백수",
Student student => "학생",
OfficeWorker officeWorker => "직장인",
Streamer streamer => "스트리머",
_ => throw new ArgumentException()
};
return job;
}
기존의 switch문과 조금 바뀐 형태로 expression 형태와 함께 사용할 수 있습니다.
case, break, default를 사용하지 않아서 편리하다는 장점이 있습니다!
default는 _로 표현하면 됩=\니다!
또한 expression 형태이기 때문에 세미콜론을 사용하지 않는 특징이 있습니다.
'C#' 카테고리의 다른 글
| Dynamic을 사용하여 다양한 파라미터값을 전달하기 (0) | 2022.09.04 |
|---|---|
| Garbage Collector (0) | 2022.08.26 |
| [C#] Reflection(리플렉션) (0) | 2022.04.13 |
| [C#] Linq(링큐, 링크) - From, Where, OrderBy, GroupBy (0) | 2022.03.21 |