[Java] DTO, VO

전우석·2024년 3월 20일

Java

목록 보기
17/24

DTO, VO

DTO

Data Transfer Object; 데이터 전송 객체, 계층 간 데이터 교환을 위해 사용되는 객체

  • 주로 데이터베이스에서 데이터를 가져오거나, 네트워크를 통해 데이터를 전송할 때 사용된다.
  • 로직을 가지고 있지 않은 순수한 데이터 객체이며, getter/setter 메소드를 포함할 수 있다.

DTO의 특징

  • 데이터를 전송하는 데 사용되는 객체로, 다른 계층간의 통신을 위해 사용된다.
  • 일반적으로 로직을 갖지 않는 순수한 데이터 객체이다.
    • 속성과, 그 속성에 접근하기 위한 getter 및 setter 메소드만을 가진다.
  • DTO는 데이터베이스 레코드의 데이터 구조를 표현하는 데 자주 사용된다.

DTO 예시

public class UserDTO {
		// 속성
    private String userName;
    private String email;

    // Getter와 Setter 메소드
    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;
    }
}

VO

Value Object; 값 객체, 값(value) 표현을 위해 사용되는 객체

  • VO는 DTO와 비슷하지만, 불변성(immutable)을 가지는 것이 일반적이다.
  • VO는 주로 데이터의 표현을 목적으로 사용되며, 비즈니스 로직을 포함할 수 있다.

VO의 특징

  • VO는 값 자체를 표현하는 객체이며, 불변성을 가진다. 즉, 생성 후 그 상태를 변경할 수 없다.
  • VO는 동등성(equality)의 개념에 의해 정의되며, VO의 인스턴스가 같은 값을 가질 때 동등한 것으로 간주된다.
  • VO는 비즈니스 로직을 포함할 수 있으며, 해당 값의 유효성 검증 등을 수행할 수 있다.

VO 예시

public final class EmailVO {
    private final String email;

    public EmailVO(String email) {
        if(email == null || !email.contains("@")) {
            throw new IllegalArgumentException("Invalid email address");
        }
        this.email = email;
    }

    public String getEmail() {
        return email;
    }

    // VO는 불변이므로 setter는 제공하지 않는다.
}

+DAO

Data Access Object; 데이터 접근 객체, 데이터베이스나 다른 영속성 저장소에 접근하기 위한 객체

  • DAO는 데이터를 CRUD(Create, Read, Update, Delete)하는 메소드를 제공한다.
  • DAO는 데이터베이스 접근 로직과 비즈니스 로직을 분리하는 데 사용된다.
  • DAO는 DTO 또는 VO를 사용하여 데이터베이스의 데이터를 조작하거나, 조회한 데이터를 전달하는 역할을 한다.

0개의 댓글