카테고리 없음
VO와 DTO
jjhim531
2024. 10. 31. 22:36
반응형
**VO(Value Object)**와 **DTO(Data Transfer Object)**는 주로 데이터 전송 및 저장을 위해 사용하는 객체를 의미하며, 각각의 목적과 특징에 따라 사용됩니다.
VO (Value Object)
- 목적: 특정 데이터를 한 번에 불러오거나 전달할 때 사용하며, 주로 값 자체의 의미를 강조합니다.
- 특징:
- 불변성: VO는 생성된 이후 상태가 변하지 않도록 불변 객체로 설계하는 것이 일반적입니다.
- 동일성: VO는 같은 값을 가지면 동일한 객체로 간주합니다.
- 주 사용 예시: 주소, 전화번호, 좌표 등, 값의 의미를 전달할 때 사용.
public class AddressVO {
private final String street;
private final String city;
private final String zipCode;
public AddressVO(String street, String city, String zipCode) {
this.street = street;
this.city = city;
this.zipCode = zipCode;
}
// Getter 메서드만 존재
public String getStreet() { return street; }
public String getCity() { return city; }
public String getZipCode() { return zipCode; }
}
위 예제의 AddressVO는 불변 객체로, 생성 후 값을 변경할 수 없습니다. equals와 hashCode를 오버라이드하여 같은 값을 가진 객체를 동일하게 처리할 수도 있습니다.
DTO (Data Transfer Object)
- 목적: 데이터 전송 및 매핑, 계층 간 통신 시 데이터를 묶어서 한 번에 전송하는 데 사용됩니다.
- 특징:
- 가변성: 생성 후 데이터를 여러 번 수정할 수 있으며, 일반적으로 불변성을 요구하지 않습니다.
- 계층 간 데이터 이동: 주로 서비스와 데이터베이스, 컨트롤러 간의 데이터 전송을 위해 사용됩니다.
- 주 사용 예시: 사용자 요청 데이터, 응답 데이터 등.
public class UserDTO {
private String userId;
private String userName;
private String email;
public UserDTO() {}
public UserDTO(String userId, String userName, String email) {
this.userId = userId;
this.userName = userName;
this.email = email;
}
// Getter, Setter
public String getUserId() { return userId; }
public void setUserId(String userId) { this.userId = userId; }
public String getUserName() { return userName; }
public void setUserName(String userName) { this.userName = userName; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
}
-
- UserDTO는 사용자의 정보를 데이터베이스에서 조회하여 서비스, 컨트롤러 계층으로 전송할 때 유용하게 사용할 수 있습니다.
VO와 DTO의 차이점 요약
특징VO(Value Object)DTO(Data Transfer Object)
목적 | 값을 표현, 비교 및 불변성을 유지 | 데이터 전송 및 계층 간 통신 |
가변성 | 불변 객체로 설계 | 수정 가능 |
사용 범위 | 데이터 일관성 필요 시 (주소 등) | 계층 간 데이터 전송 (서비스-컨트롤러 간) |
동일성 기준 | 같은 값이면 동일한 객체로 간주 | 데이터 전송에 사용되므로 동일성 기준은 없음 |
VO와 DTO는 상황에 따라 함께 사용되기도 하며, 각각의 목적에 맞춰 필요한 데이터 처리를 더 효율적이고 명확하게 해줍니다.
728x90
반응형