1 분 소요

DTO, VO, Entity, DAO 란?

DTO

Data Transfer Object 의 약자로 계층간에 데이터를 전송하기 위한 목적으로 사용하는 객체이다. 목적 자체가 어떤 로직이 있다기 보다는 데이터를 넣고 꺼내는 getter, setter 정도만 갖는 단순히 데이터를 전달하는 용도로 사용된다.

public class Member{
    private String name;
    private int age;
    
    public String getName(){
        return name;
    }
    
    public void setName(String name){
        this.name = name;
    }
    
    public int getAge(){
        return age;
    }
    
    public void setAge(int age){
        this.age = age;
    }
}

VO

Value Object의 약자로 상태가 있는 객체가 아니라 그저 값으로 취급하는 값 객체이다. getter과 로직을 포함할 수 있으나 setter는 가지지 않고, 객체의 불변성을 보장한다.

VO는 주소가 아닌 값을 비교해야 하기 때문에 서로 다른 이름을 갖는 VO 객체라도 모든 속성 값이 같다면 두 인스턴스는 같은 객체라고 할 수 있다. 그래서 VO는 Object 클래스의 equals(), hashcode() 를 오버라이딩 해야한다.

public class Money{
    private final String currency;
    private final int value;
    
     public Money(String currency, int value) {
        this.currency = currency;
        this.value = value;
    }

    public String getCurrency() {
        return currency;
    }

    public int getValue() {
        return value;
    }
    
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Money money = (Money) o;
        return value == money.getValue() && Objects.equals(currency, money.getCurrency);
    }

    @Override
    public int hashCode() {
        return Objects.hash(currency, value);
    }
}

Entity

실제 DB 테이블과 매핑되는 객체이다. 이를 기준으로 테이블이 생성되고 스키마가 변경된다. 그러므로 Entity를 요청이나 응답 값을 전달하는 클래스로 사용해서는 안된다.

Entity는 id로 구분되고 로직을 포함할 수 있다.

DAO

DB를 사용하여 데이터를 조회하거나 조작하는 기능을 전담하는 객체이다.

img1

댓글남기기