[Java] DTO와 VO의 차이점

728x90

DTO(Data Transfer Object)와 VO(Value Object)란?

객체 지향 프로그래밍에서 DTO와 VO는 모두 객체이지만 그 목적과 사용 방식이 다르다.

DTO는 주로 데이터 전송에 초점을 맞추고 있으며, VO는 객체의 값 자체에 집중하여 불변성을 유지하는 특징이 있다.

 

DTO(Data Transfer Object): 데이터 전송을 위한 객체

  • 가변 객체
    DTO는 시스템 간에 데이터를 전송하는 데 사용된다. 이 객체는 데이터를 저장하고 그 값을 변경할 수 있다. 예를 들어, 클라이언트에서 서버로 데이터를 전송하거나 데이터베이스에서 데이터를 불러와 다른 계층으로 전달할 때 주로 사용된다.
  • 특징
    1. Setter와 Getter 제공: 데이터를 외부에서 가져오거나 수정할 수 있다.
    2. 주로 네트워크 통신에서 사용: API 호출 시 데이터를 주고받는 데 적합하다.
    3. 비즈니스 로직을 포함하지 않음: 데이터 자체에 대한 처리는 최소한으로 하고 단순히 데이터를 전달하는 데 초점을 맞춘다.
public class UserDTO {
    private String name;
    private String email;

    // Getter
    public String getName() {
        return name;
    }

    // Setter
    public void setName(String name) {
        this.name = name;
    }

    // Getter
    public String getEmail() {
        return email;
    }

    // Setter
    public void setEmail(String email) {
        this.email = email;
    }
}

 

 

VO(Value Object): 값 자체를 나타내는 객체

  • 불변 객체
    VO는 객체의 속성값이 생성된 이후 변경되지 않는 것을 보장한다. 이 특성 덕분에 값 자체의 의미를 강조하며 같은 값을 가진 객체는 동일하다고 간주한다. 주로 금액, 좌표, 날짜와 같이 '하나의 값'을 명확히 나타내는 경우에 사용된다.
  • 특징
    1. Setter가 없음: 객체가 생성된 이후에는 값을 변경할 수 없다.
    2. 비즈니스 로직에서 값의 동등성 보장: VO는 값의 동일성을 중요시하기 때문에 동일한 속성값을 가진 VO는 같은 것으로 취급한다.
    3. 불변성 유지: VO는 값의 변경 없이 안전하게 사용할 수 있다.
public class MoneyVO {
    private final int amount;

    public MoneyVO(int amount) {
        this.amount = amount;
    }

    // Getter만 제공
    public int getAmount() {
        return amount;
    }

    // 값의 동등성을 비교
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        MoneyVO moneyVO = (MoneyVO) obj;
        return amount == moneyVO.amount;
    }

    @Override
    public int hashCode() {
        return Objects.hash(amount);
    }
}

 

728x90

'Backend > Java' 카테고리의 다른 글

[Java] Final 이란?  (0) 2024.10.15
[Java] 객체 생성 방법  (0) 2024.10.15
[Java] 자바 캡슐화의 이해 (Encapsulation)  (2) 2024.10.09
[Java] JVM : Java Virtual Machine  (0) 2024.10.08
[Java] Exception - 자바 예외 처리  (1) 2024.10.07