13.2.4 읽기 전용 참조(C# 7.2)
지금까지는 별칭을 부여할 수 있는 변수는 모두 쓰기 가능 변수임을 전제했다. C# 7.0에서는 쓰기 가능한 변수에만 별칭을 부여할 수 있었기 때문이다. 하지만 두 가지 시나리오에서 부족함을 느끼지 않을 수 없었다.
• 읽기 전용 필드에 대해서도 복사가 일어나지 않도록 별칭을 부여하려는 경우
• 참조 변수를 활용하되 읽기 전용으로 값에 접근하고 싶은 경우
C# 7.2에서는 이와 같은 경우에 활용할 수 있도록 읽기 전용 참조라는 기능이 추가되었다. 이 기능은 참조 지역 변수나 참조를 반환할 때 readonly 한정자를 사용할 수 있도록 해주므로, 마치 읽기 전용 필드처럼 읽기 전용으로 값에 접근할 수 있다. 이 변수에는 값을 할당할 수 없으며, 구조체 타입인 경우에는 필드의 값을 수정하거나 속성 세터를 호출할 수 없다.
TIP ≡
복사를 금지할 목적으로 읽기 전용 참조를 사용하는 경우도 있을 것이다. 하지만 때로는 그렇지 않을 수도 있기 때문에 13.4절의 내용을 읽기 전까지는 절대 제품 코드에 읽기 전용 참조를 쓰지 않길 바란다!
만약 읽기 전용 참조를 반환하는 메서드나 인덱서를 호출한 후 그 결괏값을 참조 지역 변수에 담고 싶다면, 결괏값을 저장할 참조 지역 변수도 읽기 전용 참조로 선언해야 한다. 다음 예제는 읽기 전용이 연쇄적으로 영향을 미치는 모습을 나타냈다.