=> 연산자
연산자는 C#에서 두 가지 방법으로 사용할 수 있습니다.
이 중에서도 두번째 식 본문의 정의에 대해서 알아보겠습니다
식 본문 정의
식 본문 정의는 간결하고 읽을 수 있는 형식으로 멤버 구현을 제공합니다. 다음과 같은 일반적인 구문을 포함합니다.
member => expression;
여기서 expression은 유효한 식입니다. 식은 멤버의 반환 형식이 void
이거나 멤버가 생성자 또는 종료자인 경우에만 statement 식일 수 있습니다.
메서드 및 속성 가져오기 문에 대한 식 본문 정의는 C# 6부터 지원됩니다. 생성자, 종료자, 속성 설정 문 및 인덱서에 대한 식 본문 정의는 C# 7부터 지원됩니다.
Person.ToString
메서드에 대한 식 본문 정의는 다음과 같습니다.
public override string ToString() => $"{fname} {lname}".Trim();
다음과 같은 메서드 정의의 약식 버전입니다.
public override string ToString() { return $"{fname} {lname}".Trim(); }
식 본문 멤버
식 본문 정의를 사용하면 간결하고 읽을 수 있는 형식으로 멤버 구현을 제공할 수 있습니다. 메서드 또는 속성과 같은 지원되는 멤버에 대한 논리가 단일 식으로 구성된 경우 식 본문 정의를 사용할 수 있습니다. 식 본문 정의의 일반 구문은 다음과 같습니다.
member => expression;
여기서 expression은 유효한 식입니다.
C# 6에서는 메서드 및 속성 가져오기 접근자에 대해 식 본문 정의 지원이 도입되었으며 C# 7.0에서는 지원이 확장되었습니다.
다음 표에 나열된 형식 멤버와 함께 식 본문 정의를 사용할 수 있습니다.
멤버 | 지원 버전 |
---|---|
메서드 | C# 6 |
생성자 | C# 7.0 |
종료자 | C# 7.0 |
속성 가져오기 | C# 6 |
속성 설정 | C# 7.0 |
인덱서 | C# 7.0 |
메서드
식 본문 메서드는 형식이 메서드의 반환 형식과 일치하는 값을 반환하거나 void
를 반환하는 메서드의 경우 일부 작업을 수행하는 단일 식으로 구성됩니다. 예를 들어 ToString 메서드를 재정의하는 형식에는 일반적으로 현재 개체의 문자열 표현을 반환하는 단일 식이 포함되어 있습니다.
다음 예제에ToString 메서드를 식 본문 정의로 재정의하는 Person
클래스를 정의합니다. 또한 이름을 콘솔에 표시하는 DisplayName
메서드를 정의합니다. return
키워드는 ToString
식 본문 정의에 사용되지 않습니다.
using System; public class Person { public Person(string firstName, string lastName) { fname = firstName; lname = lastName; } private string fname; private string lname; public override string ToString() => $"{fname} {lname}".Trim(); public void DisplayName() => Console.WriteLine(ToString()); } class Example { static void Main() { Person p = new Person("Mandy", "Dejesus"); Console.WriteLine(p); p.DisplayName(); } }
생성자
생성자에 대한 식 본문 정의는 일반적으로 생성자의 인수를 처리하거나 인스턴스 상태를 초기화하는 단일 할당 식 또는 메서드 호출로 구성됩니다.
다음 예제에서는 생성자에 name이라는 단일 문자열 매개 변수가 있는 Location
클래스를 정의합니다. 식 본문 정의에서 Name
속성에 인수를 할당합니다.
public class Location { private string locationName; public Location(string name) => Name = name; public string Name { get => locationName; set => locationName = value; } }
종료자
종료자에 대한 식 본문 정의에는 일반적으로 관리되지 않는 리소스를 해제하는 문 등의 정리 문이 포함되어 있습니다.
다음 예제에서는 식 본문 정의를 사용하여 종료자가 호출되었음을 나타내는 종료자를 정의합니다.
using System; public class Destroyer { public override string ToString() => GetType().Name; ~Destroyer() => Console.WriteLine($"The {ToString()} destructor is executing."); }
속성 가져오기 문
속성 가져오기 접근자를 직접 구현하려는 경우 단순히 속성 값을 반환하는 단일 식에 대해 식 본문 정의를 사용할 수 있습니다. return
문은 사용되지 않습니다.
다음 예제에서는 Location.Name
속성을 정의합니다. 이 속성의 속성 가져오기 접근자는 해당 속성을 지원하는 private locationName
필드의 값을 반환합니다.
public class Location { private string locationName; public Location(string name) => Name = name; public string Name { get => locationName; set => locationName = value; } }
식 본문 정의를 사용하는 읽기 전용 속성은 명시적 set
문 없이 구현할 수 있습니다. 사용되는 구문은 다음과 같습니다.
PropertyName => returnValue;
다음 예제에서는 Location
클래스를 정의합니다. 이 클래스의 읽기 전용 Name
속성은 private locationName
필드의 값을 반환하는 식 본문 정의로 구현됩니다.
public class Location { private string locationName; public Location(string name) => locationName = name; public string Name => locationName; }
속성 설정 문
속성 설정 접근자를 직접 구현하려는 경우 속성을 지원하는 필드에 값을 할당하는 한 줄 식에 대해 식 본문 정의를 사용할 수 있습니다.
다음 예제에서는 Location.Name
속성을 정의합니다. 이 속성의 속성 설정 문은 해당 속성을 지원하는 private locationName
필드에 입력 인수를 할당합니다.
public class Location { private string locationName; public Location(string name) => Name = name; public string Name { get => locationName; set => locationName = value; } }
인덱서
속성과 마찬가지로, get 접근자가 값을 반환하는 단일 문으로 구성되거나 set 접근자가 단순 할당을 수행하는 경우 인덱서의 get 및 set 접근자는 식 본문 정의로 구성됩니다.
다음 예제에서는 다양한 스포츠의 이름이 포함된 내부 String 배열을 포함하는 Sports
라는 클래스를 정의합니다. 인덱서의 get 및 set 접근자는 둘 다 식 본문 정의로 구현됩니다.
using System; using System.Collections.Generic; public class Sports { private string[] types = { "Baseball", "Basketball", "Football", "Hockey", "Soccer", "Tennis", "Volleyball" }; public string this[int i] { get => types[i]; set => types[i] = value; } }
ref : https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/operators/lambda-operator
ref : https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/statements-expressions-operators/expression-bodied-members
'프로그래밍(Programming) > C#' 카테고리의 다른 글
?. 널 조건부 연산자 와 null 병합 연산자 (0) | 2018.09.06 |
---|---|
형식 매개 변수에 대한 제약 조건 (0) | 2018.09.06 |
추상 속성 정의 (0) | 2018.09.02 |
추상 및 봉인 클래스와 클래스 멤버 (0) | 2018.09.02 |
implicit 암시적 사용자 정의 형식 변환 연산자 (0) | 2018.08.30 |