[Java] 데이터는 Map과 DTO 어디에 담는 것이 좋을까
데이터를 가공하고 전달하는 과정에서 어떤 분은 Map
을 사용하고, 어떤 분은 DTO(Data Transfer Object)
와 같이 데이터를 담을 클래스를 만들어 사용하는 것을 볼 수 있다.
그렇다면 Map과 DTO 중 어떤 것을 사용해야 할까?
Map의 장단점
Map은 Key-Value를 쌍으로 저장하는 데이터 구조로, 다양한 데이터를 저장할 수 있다. 따라서 유연한 데이터 구조를 만들 수 있고 사용하기가 간편해 초기 개발 단계에서 유용하다는 장점이 있다.
하지만 타입 안정성의 부족과 가독성이 떨어진다는 큰 단점이 있다.
Map의 Value는 Object 타입이다. 즉 최상위 클래스이기 때문에 제네릭 타입을 지원하지만, 컴파일 타임 시 데이터 타입 체크를 하지 않기 때문에 런타임 오류가 발생할 수 있다.
그리고 코드에서 Map을 사용하게 된다면, 어떤 데이터가 어떤 역할을 하는지 명확하게 파악하기가 어렵다.
또한 데이터를 꺼내 사용할 때 타입캐스팅 비용이 발생하며, 데이터의 수정이 가능하기 때문에 불변성을 확보할 수 없다는 단점이 있다.
그렇다면 DTO는 어떨까?
DTO를 사용하면 앞서 얘기한 Map의 단점들을 모두 보완할 수 있다.
DTO는 컴파일 타임에 데이터 타입 검사를 할 수 있으므로 런타임 오류를 방지할 수 있다.
그리고 데이터의 역할과 의미를 코드에서 명확하게 확인할 수 있으며, 데이터 구조가 변경된다면 DTO 클래스만 수정하면 되므로 유지보수가 용이하다.
결론
결론적으로, 데이터를 가공하고 전달하는 과정에서는 DTO를 사용하는 것이 더 나은 선택지로 보인다.
Map은 유연성과 간편함 측면에서 장점을 가지고 있지만, 타입 안정성 부족과 가독성 문제로 인해 프로젝트 규모가 커질수록 코드 관리가 어려워질 것이다. 또한 데이터의 불변성을 확보하기 어려워 예기치 않은 버그를 발생시킬 수 있다.
반면에 DTO 클래스를 사용하면 컴파일 타임에 타입 검사를 하고, 데이터의 의미와 역할을 명확하게 정의할 수 있다. 데이터 구조 변경 시 DTO 클래스만 수정하면 되므로 유지보수가 용이하며, 코드의 가독성과 안정성을 향상시킨다.
물론 DTO가 초기 작성에 조금 더 노력이 필요할 수 있지만, 장기적으로 유지보수의 관점으로 봤을 때는 훨씬 많은 노력을 아낄 수 있다고 생각한다.
따라서 프로젝트의 규모와 요구사항을 고려해서 선택하면 되겠지만, 나는 Map이 장점을 드러내는 특별한 경우가 아니라면 DTO를 사용할 것 같다.
Leave a comment