[More Effective C#] 1장 - Item 4: 값 타입과 참조 타입을 구분하라

SY·2023년 9월 30일

More Effective C#

목록 보기
4/46
post-thumbnail

빌 와그너, ⌜More Effective C# 2판⌟, 김완섭 옮김, 한빛미디어, 2019
이 포스팅은 ⌜More Effective C# 2판⌟의 내용을 기반으로 작성되었습니다.


아이템 4: 값 타입과 참조 타입을 구분하라



값 타입과 참조 타입을 나중에 변경하려면 많은 작업이 필요하기 때문에 생성할 때 결정하게 된다.

값 타입 (struct)

  • 작고 가벼워야 한다.
  • 값을 저장한다.
  • 메모리 관리 면에서 더 효율적
    • 힙 조각화, 가비지, 간접 참조 모두 줄어든다.
  • 메서드나 속성에 의해 반환될 떄 데이터 자체를 복사하여 예상 못한 상태 변화가 일어날 가능성이 낮다.
  • 매우 제한적으로만 지원
    • 상속관계 불가 (Sealed 상태)
    • 인터페이스로 구현하더라도 박싱으로 성능 저하
  • 저수준의 데이터 저장용으로 적합


참조 타입 (class)

  • 클래스의 계층 구조를 형성
  • 동작을 정의 한다.
  • 상속 지원, 코드를 수정하더라도 대응하기가 상태적으로 편리함
  • 인터페이스를 구현하면 암시적으로 발생할 수 있는 박싱과 언박싱을 피할 수 있다.
  • 비교적 복잡한 동작을 모델링하려면 적합
  • 어플리케이션의 동작 정의에 적합



참조 타입의 객체를 많이 만들게 되면 힙이 조각나서 성능도 떨어진다.
하지만, 이런 기준은 가장 낮은 순위로 고려된다.
값 타입과 참조 타입을 결정할 떄는 타입의 용도를 훨신 중요하게 고려해야 한다.

  • 심지어 .NET 문서에도 기준을 타입의 크기로 고려하라고 했지만, 용도를 기준으로 삼는 것이 훨신 적절하다.


용도에 따라 값 타입과 참조 타입을 결정해야 한다.
값 타입은 데이터 저장용, 참조 타입은 동작 정의에 적절하다.
쓰임새를 예상하기 어려운 경우라면 우선 참조타입을 사용하라.

profile
게임 개발 공부

0개의 댓글