| 항목 | DTO (Data Transfer Object) | Map (Map<String, Object>) |
|---|---|---|
| 정의 | 데이터 전달을 위한 클래스 | 키-값 쌍으로 데이터를 저장하는 자료구조 |
| 사용 목적 | 데이터 구조를 명확히 정의 | 유동적인 데이터 처리, 임시 저장 |
| 형식 | 정적 타입 (클래스 정의 필요) | 동적 타입 (key/value 구조) |
| 항목 | DTO | Map |
|---|---|---|
| 타입 안정성 | 높음 (컴파일 시점에 오류 확인) | 낮음 (런타임 오류 가능) |
| IDE 자동완성 | 지원 | 불가 |
| 가독성/명확성 | 좋음 (필드 정의 명확) | 떨어짐 (key를 문자열로 직접 관리) |
| 유지보수 | 편리 (필드 변경 시 영향 추적 쉬움) | 어려움 (key 이름 추적 어려움) |
| 복잡한 구조 대응 | 적합 | 불편 |
| 유연성 | 낮음 (정해진 구조만 가능) | 높음 (필드가 자유로움) |
| 적용 예시 | API 요청/응답 처리, DB 연동 | 임시 데이터 처리, 비정형 데이터 |
dto 방식
public class UserDTO {
private String name;
private int age;
// getter/setter 생략
}
UserDTO user = new UserDTO();
user.setName("홍길동");
user.setAge(30);
System.out.println(user.getName());
Map 방식
Map<String, Object> user = new HashMap<>();
user.put("name", "홍길동");
user.put("age", 30);
String name = (String) user.get("name");
| 상황 | 추천 방식 | 이유 |
|---|---|---|
| API 요청/응답 객체 | DTO | 명확한 구조와 타입 안정성 |
| DB 입력/조회 값 매핑 | DTO | MyBatis, JPA 등에서 자주 사용 |
| 동적 JSON 처리 | Map | 키가 유동적일 때 유리 |
| 간단한 임시 저장 | Map | DTO 만들기 귀찮을 때 |
| 복잡한 비즈니스 로직 | DTO | 명확한 구조로 처리 가능 |
📌 정형 데이터 → DTO
📌 비정형 또는 유동적 데이터 → Map