더북(TheBook)

11.5.1 System.Tuple<…>

.NET 4의 System.Tuple<…>은 변경 불가능한 참조 타입이다. 그럼에도 이 타입 내의 개별 요소들은 모두 변경 가능한 타입이 될 수 있다. 이러한 특성은 마치 readonly 필드처럼 변경 가능성의 여지를 일부 남겨 두고 있다고 생각하는 것이 좋겠다.

이 타입의 가장 큰 단점은 언어 차원에서의 통합이 부족하다는 것이다. 이러한 구식 튜플은 상대적으로 생성하기가 어렵고, 타입을 지정하는 것도 번잡하고, 11.3절에서 설명한 사용 편의성도 제공하지 않는다. 가장 불편한 부분은 ItemX 형태의 이름만 사용할 수 있다는 점이다. 물론, C# 7이 제공하는 튜플에서 개별 요소에 이름을 붙이는 것도 그저 컴파일 시에만 유용한 기능일 따름이지만, 이러한 기능이 제공하는 사용성의 차이는 매우 크다.

이외에도 참조 타입은 그저 값을 담기 위한 용도라기보다 완벽한 하나의 객체로 생각되는데, 이는 어디에서 이 기능을 사용하는지에 따라 장점이 될 수도 있고 단점이 될 수도 있다. 이 타입은 대체로 편리성은 떨어지지만, 객체를 복사할 때 참조만 복사하면 되므로 좀 더 효율적이다. 예를 들어 크기가 큰 ValueTuple<…>은 이를 복사하면 모든 튜플 요소를 함께 복사해야 한다. 하지만 Tuple<…>을 사용하면 참조만 복사하면 된다. 이러한 특징은 암시적으로 멀티스레드 안정성을 제공한다고도 볼 수 있는데, 참조에 대한 복사는 원자적으로 수행되지만 튜플 내의 요소를 모두 복사하는 작업은 그렇지 않기 때문이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.