DTO, VO, Entity, DAO
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를 사용하여 데이터를 조회하거나 조작하는 기능을 전담하는 객체이다.

댓글남기기