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

DTO를 struct로 쓰면 정말 더 빠를까?

 DTO를 struct로 쓰면 정말 더 빠를까?

"메모리를 아껴야 한다." 개발자의 본능 같은 거다.

힙(Heap) 대신 스택(Stack)을 쓰면 GC가 쉴 수 있으니까 당연히 더 빠를 거라고 믿었다. 그런데 벤치마크를 돌려보고 생각이 바뀌었다.

복사 비용의 역설 참조 타입(class/record)은 데이터가 아무리 커도 8바이트 주소값만 넘기면 끝이다. 하지만 struct DTO는 메서드 인자로 넘길 때마다 그 안에 든 모든 데이터를 복사한다.

필드가 5개, 10개로 늘어날수록 메서드 호출 한 번에 수십 바이트씩 메모리 복사가 일어난다. 가볍게 전달하려고 struct를 썼는데, 정작 전달할 때마다 거대한 짐을 새로 꾸리는 꼴이다.

GC는 쉬지만 CPU는 바쁘다 힙 메모리를 쓰지 않으니 GC(Garbage Collector)의 부담은 줄어든다. 하지만 그 대가로 CPU는 쉴 새 없이 메모리를 복사하느라 바빠진다.

메모리 해제 비용을 아끼려다 데이터 전송 비용으로 더 큰 대가를 치르는 셈이다. 심지어 덩치가 커진 struct는 CP...