실제로 분해 시에 할당이 사용되는 경우는 지역 변수로 값을 할당하거나 this의 필드와 속성 등에 값을 할당할 때가 대부분이다. 실제로 생성자 내에서 분해를 통한 할당 방법을 사용하면 C# 7에서 소개된 표현식 본문 생성자를 사용하도록 유도하여 코드를 아주 깔끔하게 작성할 수 있다. 상당히 많은 생성자가 주어진 매개변수를 이용하여 필드나 속성에 값을 할당하는 역할을 수행한다. 만약 주어진 매개변수로 튜플 리터럴을 우선 생성한 후, 이를 분해를 이용하여 할당한다면 코드를 단일 표현식으로 작성할 수 있다.
예제 12-4 튜플 리터럴과 분해를 이용하여 생성자 내의 할당문을 단순화 ▶ Point.cs
public sealed class Point
{
public double X { get; }
public double Y { get; }
public Point(double x, double y) => (X, Y) = (x, y);
}
이런 간결함은 참 좋다. 생성자의 매개변수를 속성으로 매핑하는 것처럼 보이는 선명함도 보기 좋다. 게다가 C# 컴파일러는 이런 패턴을 인식하여 불필요한 ValueTuple<double, double> 타입의 튜플을 생성하지 않도록 조치한다. 다만 이 경우에도 컴파일 시에는 System.ValueTuple.dll이 필요한데, 동일 프로젝트의 다른 부분에서 이미 튜플을 사용하고 있거나 대상 프레임워크가 System.ValueTuple을 이미 지원하고 있다면 이 또한 고민할 필요가 없다.
» 이를 C#의 관용적 표현이라고 볼 수 있는가?
앞서 이야기한 대로 이러한 방식은 고유의 장점과 단점을 모두 가지고 있다. 이러한 기법은 생성자의 구현 세부 사항에 해당하며 클래스 본문의 다른 부분에 영향을 미치지 않는다. 이런 스타일을 사용하기로 했더라도 나중에 마음에 들지 않으면 손쉽게 제거할 수 있다. 다소 이른 감이 없진 않지만 몇 가지 주의할 부분을 알아 두는 것도 나쁘지 않다. 우선 튜플 리터럴이 주어진 매개변수와 정확히 일치하지 않는다면 주의가 필요하다. 사전 조건 등을 추가해야 한다면 기존에 사용하던 할당문을 쓰는 것도 괜찮은 방법이다.