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
반응형