반응형
표현식 본체 멤버(Expression-bodied member)
C#의 속성이나 메서드는 보통 여러 문장(statement)들로 구성된 블록을 실행하게 된다. 하지만 속성이나 메서드의 Body 블록이 간단한 경우, 문 블럭(Statement Block)을 사용하는 대신 간단한 함수식(Expression)을 사용할 수 있는데, 이를 표현식 본체 멤버(Expression-bodied member)라고 부른다. 이는 기존의 람다식과 유사한 것으로 속성이나 메서드 Body를 간략한 람다식처럼 표현한 것이다.
기본 형태
[반환타입] [멤버이름] => [표현식];
- 메서드
- 속성(읽기 전용)
- 생성자
- 소멸자
- 인덱서
- 연산자 오버로딩
- 위에 항목들을 람다식(Lambda Expression)의 형태(=>)를 사용하여 정의를 단순화 할 수 있다.
종종 코드에서 =>만 달랑 있어서 = 대입 연산자의 오타인 줄 알았는데 아니었다.
예제로 알아보자
// 기존의 속성
public int Area
{
get
{
return Height * Width;
}
}
// C# 6.0의 Expression-bodied member 표현
public int Area => Height * Width;
메서드에서 Expression-bodied member를 사용하면 하나의 리턴 값을 가질 수 있고 혹은 void 리턴을 할 수도 있다. 속성에서 사용하는 Expression-bodied member는 getter로서 하나 이상의 값을 리턴한다. 메서드나 속성 이외에도 인덱서, Operator 연산자 등에서 Expression-boided member 표현을 사용할 수 있다. 이러한 다양한 종류의 Expression-boided member 표현 예들이다.
// 메서드에서 하나의 Point 객체 리턴
public Point Move(int x, int y) => new Point(X+x, Y+y);
// 메서드에서 void 리턴
public void Print() => Console.WriteLine(data);
// 속성에서 get 리턴
public string Name => FirstName + " " + LastName;
// 인덱서에서 Customer 객체 리턴
public Customer this[int id] => db.FindCustomer(id);
// 연산자 메서드 표현
public static Complex operator +(Complex a, Complex b) => a.Add(b);
출처
'프로그래밍 > C#' 카테고리의 다른 글
C# Queue 기본 생성자로 초기화 하기 (18) | 2023.07.26 |
---|---|
C# virtual 키워드 (24) | 2023.07.05 |
C# where 제네릭 형식 제약(generic type constraint) (6) | 2023.06.28 |
Queue vs ConcurrentQueue로 쓰레드 환경에서 테스트 (12) | 2023.06.27 |
C# 익명 타입 (Anonymous Type) (10) | 2023.06.19 |
댓글