대상 타입을 값 타입으로 제한한 데는 크게 두 가지 이유가 있다.
• 이 기능 자체가 값 타입이 복사될 때 발생하는 비용을 피하기 위한 기능이기 때문이다. 참조 타입에 대해서는 아무런 이득이 없다.
• 첫 번째 참조 매개변수에 대해 참조 타입을 허용한다면, 이 매개변수에 null 참조를 사용할 수도 있어야 한다. 만약 이를 허용하면, C# 개발자나 개발 도구가 가정하고 있는 매우 기초적인 특성이 달라진다. 즉, x.Method()처럼 호출할 때(x는 참조 타입) x는 null이 될 수 없다는 매우 기초적인 가정이 무너진다.
확장 메서드에 ref나 in이 많이 사용될 것 같지는 않다. 하지만 언어의 일관성 차원에서 보자면 마땅히 지원되어야 하는 부분이다.
이 기능은 이 장에서 다루었던 다른 기능들과 조금 차이가 있다. 정리 차원에서 다시 한 번 살펴보자.
• 참조 지역 변수
• 참조 반환
• 참조 지역 변수와 참조 반환의 읽기 전용 버전
• in 매개변수: 참조 매개변수의 읽기 전용 버전
• 읽기 전용 구조체: 이는 복사본이 생성되는 것을 피하기 위해서 in 매개변수, 읽기 전용 참조 지역 변수, 읽기 전용 변환을 허용한다.
• 확장 메서드의 대상 타입에 대해 참조 매개변수와 in 매개변수 허용
참조 매개변수를 시작으로 이 개념을 어떻게 확장하여 사용할 수 있을지를 고민해 봤다면, 이 목록에 나열한 내용과 유사한 내용들을 고민했을 것이다. 다음으로 알아볼 내용은 유사 참조 구조체에 대한 내용이다. 이는 앞서 나열한 내용 전체와 관련이 있지만, 마치 새로운 타입처럼 보이기도 한다.