클리엘
CLIEL LAB
클리엘
전체 방문자
오늘
어제
  • 분류 전체보기 (514)
    • Mobile (47)
      • Kotlin (47)
    • Web (84)
      • NestJS (9)
      • HTML5 & CSS3 (38)
      • Javascript (20)
      • TypeScript (6)
      • JQuery (11)
    • .NET (301)
      • C# (84)
      • ASP.NET (67)
      • Windows API for .NET (128)
    • Server (53)
      • SQL Server (10)
      • MariaDB (18)
      • Windows Server (6)
      • node.js (19)
    • System (12)
      • 작업LOG (12)
    • Review (11)
    • ETC (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 블로그 정리

인기 글

태그

  • ASP.NET
  • node.js
  • android
  • 변수
  • asp.net core
  • NestJS
  • exception
  • Windows API
  • HTML5
  • android studio
  • Kotlin
  • c#
  • asp.net core web api
  • MariaDB
  • Entity Framework
  • JavaScript
  • jQuery
  • .NET
  • LINQ
  • CSS3

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
클리엘

CLIEL LAB

.NET/C#

[C#] C#과 OOP(Object-Oriented Programming) - 6. 패턴 매칭(Pattern Matching)

2022. 6. 24. 11:50
728x90

6. 객체 비교를 위한 패턴 매칭(Pattern Matching)

 

패턴 매칭은 이미 아래 글에서 잠깐 살펴보았는데

[.NET/C#] - [C#] 흐름제어, 형변환, 예외처리

 

[C#] 흐름제어, 형변환, 예외처리

1. 변수 ● 산술 연산자 연산자는 변수나 실제값에 해당하는 피연산자를 더하거나 곱하는 등의 연산을 수행하며 일반적으로 다른 변수에 할당 가능한 또 다른 값을 반환합니다. 연산자 중 이항

lab.cliel.com

예제에서의 경우뿐만 아니라 객체의 Type비교를 위한 경우에도 패턴 매칭을 적용할 수 있습니다.

namespace mylibrary;
public class Car
{
    public int displacement
    {
        get;
        set;
    }
}

public class Truck
{

}

예제는 Car와 Truck2개의 Class가 있는데 고속도로 통행 요금은 각각의 Type마다 그리고 Car의 경우 displacement의 값에 따라 달라야 한다고 가정하는 경우 패턴 매칭을 통해 해당 가능을 구현하게 되면 다음과 같이 할 수 있을 것입니다.

using mylibrary;

Car sedan = new();
Truck dump = new();

sedan.displacement = 999;

object o = sedan;

int cost = o switch
{
    Car { displacement : > 999 } => 2000,
    Car { displacement: <= 999 } => 1000,
    Truck => 5000,
    _ => 3000
};

객체 o가 Car형식인지 Truck형식인지에 따라 그리고 Car형식이라면 가지고 있는 displacement값이 무엇인지에 따라 요금을 결정하고 있습니다. 또한 객체가 Car도 Truck형식도 아니라면 _(언더바)를 통해 기본요금 3000이 결정됩니다.

728x90
저작자표시 비영리 변경금지 (새창열림)

'.NET > C#' 카테고리의 다른 글

[C#] 인터페이스(Interface)와 상속(Inheriting) - 1. 메서드(Method)와 이벤트(Event)  (0) 2022.06.24
[C#] C#과 OOP(Object-Oriented Programming) - 7. 레코드(Record)  (0) 2022.06.24
[C#] C#과 OOP(Object-Oriented Programming) - 5. 속성(Property)과 인덱서(Indexer)  (0) 2022.06.24
[C#] C#과 OOP(Object-Oriented Programming) - 4. Method (메서드)  (0) 2022.06.24
[C#] C#과 OOP(Object-Oriented Programming) - 3. 필드(Field)  (0) 2022.06.24
    '.NET/C#' 카테고리의 다른 글
    • [C#] 인터페이스(Interface)와 상속(Inheriting) - 1. 메서드(Method)와 이벤트(Event)
    • [C#] C#과 OOP(Object-Oriented Programming) - 7. 레코드(Record)
    • [C#] C#과 OOP(Object-Oriented Programming) - 5. 속성(Property)과 인덱서(Indexer)
    • [C#] C#과 OOP(Object-Oriented Programming) - 4. Method (메서드)
    클리엘
    클리엘
    누구냐 넌?

    티스토리툴바