로딩
요청 처리 중입니다...

DTO는 왜 struct 대신 record를 쓸까?

 DTO는 왜 struct 대신 record를 쓸까?

모델을 만들다 보면 결국 이 질문으로 다시 돌아온다. 단순히 데이터만 묶는 거면 struct가 더 맞는 거 아닌가?

그런데 실무 코드를 보면 대부분 record를 쓰고 있다. 요즘은 record struct까지 나왔는데도 결국 선택은 record(class)로 모인다.

왜 그럴까? struct: 가볍지만, 오래 들고 가기엔 부담된다 struct는 값 타입이다.

대입할 때마다 복사가 일어난다. 문제는 DTO가 생각보다 꽤 많이 돌아다닌다는 점이다.

메서드 인자로 넘어가고 LINQ에서 변형되고 매핑되고 직렬화된다 이 과정에서 계속 복사가 발생한다. DTO가 작을 때는 괜찮다.

그런데 필드가 조금만 늘어나면 이 복사 비용이 무시하기 어려워진다. 그리고 하나 더.

DTO는 단순 데이터 덩어리 같지만 현실에서는 계층 구조가 붙는 순간이 많다. (API 공통 응답, 베이스 모델 등) 이때 struct는 바로 선택지에서 빠진다.

상속이 안 되기 때문이다. record class: 값처럼 쓰는 참...