국비지원 공부 정리/SpringBoot

JAVA에 존재하는 객체 - DTO, VO,

worldstroy 2025. 4. 10. 11:52

DTO (Data Transfer Object)

@Getter
@Builder
public class TravelPlanDTO
{

    private String travelCode;
    private String title;
    private String location;
    private String img;
    private LocalDate startDate;
    private LocalDate endDate;
    private int expense;
    private String founder;
    private Set<String> participants;
    private boolean isCalculate;
    private List<String> profiles;
    private Number currentCurrency = 0;

}

 

• 계층 간 데이터 교환을 위해 사용하는 객체
• 데이터 전달 목적으로만 사용되므로 다른 로직을 가지지 않는 순수한 데이터 객체
• 일반적으로 getter/setter 메서드로만 구성
• 데이터베이스 조회 결과를 담아 전달하거나 전달 받는 역할을 담당함

 

 

VO (Value Object)

public final class Point {
    private final int x;
    private final int y;
    /**
    * Point 객체를 생성합니다.
 * @param x x 좌표
    * @param y y 좌표
     */
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
    // Getter 메서드들
public int getX() {
        return x;
    }
    public int getY() {
        return y;
    }
}
DTO와 유사하지만, VO는 read-Only 속성을 갖고 있는 객체
값 자체를 표현하는 불변(immutable) 객체로 한 번 생성 되면 내부 값을 변경할 수 없음
equals() 와 hashCode() 메서드를 오버라이드하여 값 비교 수행

 

DTO vs. VO

  DTO (Data Transfer Object) VO (Value Object)
목적 계층간 데이터 전송 도메인 내 값 표현
불변의 복합 값 표현
동등성 일반적으로 참조 동등성
속성값이 같아도 다른 객체로 취급 가능
값 동등성 속성
값이 같으면 같은 객체 취급
가변성 일반적으로 가변(mutable)
setter 메서드를 통한 속성 변경 가능
불변(immutable)
생성후 내부 상태 변경 불가
로직 비즈니스 로직을 포함하지 않음 
주로 getter/setter 만 포함
간단한 도메인 로직 포함 가능 값과 관련된 연산이나 검증 로직 포함 가능