더북(TheBook)

가변 구조체를 이용한 다음과 같은 코드를 생각해 보자.

var a = new Person(42, "Sedat", "Kapanoglu", "San Francisco");
var b = a;
b.City = "Eskisehir";
Console.WriteLine(a.City);
Console.WriteLine(b.City);

어떤 결과를 예상했는가? 만약 클래스였다면 두 줄 모두 Eskisehir를 새로운 도시로 표시했을 것이다. 하지만 서로 다른 두 복사본을 가지고 있기 때문에 San FranciscoEskisehir가 출력된다. 따라서 나중에 실수로 변경되어 버그가 발생하지 않도록 구조체는 항상 불변으로 만드는 것이 좋다.

코드 재사용을 위해 상속보다는 합성을 선호해야 하지만, 주어진 종속성을 포함한다면 상속이 유용할 수도 있다. 이러한 경우 클래스는 구조체보다 훨씬 더 유연하다.

클래스는 할당에서 참조만 복사하기 때문에 크기가 클수록 더 효율적인 스토리지를 제공할 수 있다. 이 모든 것을 생각해 볼 때, 상속이 필요 없는 작고 불변의 값 타입이라면 구조체를 자유롭게 사용하는 게 더 낫다.

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