더북(TheBook)

13.5.1 복사를 피하기 위해 확장 메서드에서 참조 매개변수나 in 매개변수를 사용하는 방법

크기가 매우 큰 구조체가 있고, 이 구조체를 사용할 때 복사본이 생성되지 않기를 기대한다고 하자. 그리고 이 구조체 내의 속성값을 이용해서 결괏값을 계산해야 하는 메서드가 필요하다고 해 보자(예를 들어 3차원 벡터와 그 크기를 구하는 메서드). 이 구조체가 자체적으로 이런 메서드(혹은 속성)를 가지고 있다면 좋을 것 같다. 게다가 읽기 전용으로 선언되어 있다면 복사본도 생성되지 않을 테니 더할 나위 없이 좋을 것이다. 하지만 구조체를 작성할 당시에 개발자가 고려했던 내용보다 지금 우리가 수행해야 하는 일이 아마도 훨씬 더 복잡할 것이다. 이 절에 포함되어 있는 예제들은 읽기 전용으로 선언된 Vector3D 구조체를 사용하는데, 다음에 이 구조체의 코드를 나타냈다. 이 구조체는 X, Y, Z 속성을 노출한다.

예제 13-17 간단한 Vector3D 구조체 ▶ Vector3D.cs

public readonly struct Vector3D
{
    public double X { get; }
    public double Y { get; }
    public double Z { get; }
    
    public Vector3D(double x, double y, double z)
    {
        X = x;
        Y = y;
        Z = z;
    }
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.