언어/C#

C#3. 조건 연산자, 패턴

에린_1 2024. 7. 16. 18:39
728x90

C#

조건 연산자(Conditional Operator)

  • 조건 연산자는 ?: 은 큭이하게도 피연산자가 세 개이다.
  • 조건식 ? 참일 때의 값 : 거짓일 때의 값

null 조건부 연산자

  • ?. 은 객체의 멤버에 접근하기 전 해당 객체가 null인지 검사해서 그 결과가 참이면 그 결과로 null을 반환하고, 그렇지 않은 경우 . 뒤에 지정된 멤버를 반환한다.
  • ?[] 도 동일한 기능을 수행한다. 배열과 같은 컬렉션 객체의 첨자를 이용한 참조에 사용된다는 점이 다르다.

null 병합 연산자

  • ?? 연산자는 두 개의 피연산자를 받아들이고 왼쪽 피연산자가 null인지 평가한다. 평가 결과가 null이 아닌것으로 나타나면 왼쪽 피연산자를 그대로 반환하고, 만약 왼쪽 피연산자가 null인 것으로 평가되면 오른쪽 피연산자를 반환한다.

Switch문과 패턴 매칭

  • Switch 레이블의 패턴에는 상수와 형식을 비롯해서 관계, 논리 등등 C#이 지원하는 다양한 패턴을 적용할 수 있다.

케이스 가드(Case Guard)

  • 케이스 가드란 switch 문의 case 절의 패턴을 더 구체적으로 만들어주는 추가적인 조건검사라고 할 수 있다.
  • 케이스 가드는 case절 뒤에 when 절을 붙여 사용한다.
    • when절은 if문처럼 true/false로 결과가 나오는 식을 입력 받는다.

패턴 매칭(Pattern Matching)

  • 어떤 식(Expression)이 특정 패턴(Pattern(형태))과 일치하는지 검사한다.
  • 패턴 매칭을 이용하면 분기문을 간결하고 읽기 쉬운 코드로 대체할 수 있다.
  • 식(Expression)
    • 코드에서 단일 결과 값을 만들어 낼 수 있는 연산자와 연산자의 조합이다.
    • 리터널과 상수, 변수는 연산자 없이 식이 될 수 있다.

C#이 지원하는 패턴

선언 패턴(Declaration Pattern)

  • 주어진 식이 특정 형식(ex)int, string)과 일치하는지 평가한다.
  • 주어진 식과 형식이 일치한다면, 선언 패턴(Declaration Pattern)은 식을 해당 형식으로 변환한다.

형식 패턴(Type Pattern)

  • 선언 패턴과 거의 같은 방식으로 동작하지만, 변수 생성없이 형식 일치 여부만 테스트한다.

상수 패턴(Constant Pattern)

  • 식이 특정 상수와 일치하는지 검사한다.
  • 정수 리터널과 문자열 리터럴 뿐 아니라 null과 enum등 모든 상수와 매칭 할 수 있다.

프로퍼티 패턴(Property Pattern)

  • 식의 속성이나 필드가 패턴과 일치하는지 검사한다.
  • 입력된 식이 int, double 같은 기본 데이터 형식이 아닌 경우 특히 유용하다.

관계 패턴(Relational Pattern)

  • 관계 연산자를 이용해서 입력 받은 식을 상수와 비교한다.

논리 패턴(Logical Pattern)

  • 패턴과 패턴을 패턴 논리 연산자를 조합해서 하나의 논리 패턴으로 만들 수 있다.

괄호 패턴(Parenthesized Pattern)

  • 소괄호로 패턴을 감싸, 논리 패턴으로 여러 패턴을 조합하여 이를 새로운 패턴으로 만드는 경우 사용한다.

위치 패턴(Position Pattern)

  • 식의 결과를 분해(Peconstruct) 하고, 분해된 값들이 내장된 복수의 패턴과 일치하는지 검사한다.
  • 위치 패턴 안에 내장되는 패턴에는 형식 패턴, 상수 패턴등 어떤 패턴이든 올 수 있다.
    • 분해된 값들과 내장된 패턴의 개수, 순서가 일치해야 한다.

Var 패턴

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

무시 패턴(Discard Pattern)

  • var 패턴과 같이 모든 식과의 패턴 일치 검사를 성공시킨다.
  • var 패턴과는 다르게 is식에서는 사용할 수 없고, switch식에서만 사용할 수 있다.
  • ‘모든 식’을 매칭할 수 있기 때문에 switch문의 default 케이스와 비슷한 용도로 사용하면 된다.
  • 무시 패턴은 _ 기호를 이용한다.

목록 패턴(List Pattern)

  • 배열이나 리스트가 패턴의 시퀀스가 일치하는지 검사한다.
  • 패턴의 시퀀스는 대괄호 [ 와 ] 사이에 패턴의 목록을 입력해서 만든다.
728x90

'언어 > C#' 카테고리의 다른 글

리플렉션  (0) 2024.07.31
C#5. 인터페이스, 추상 클래스, 프로퍼티, 컬렉션  (1) 2024.07.18
C#4. 메소드, 클래스, 접근한정자, 상속  (0) 2024.07.17
C#. 2  (0) 2024.07.15
C#. 1  (0) 2024.07.11