Entity
- 실제 DB에 저장되는 클래스
- Entity를 기준으로 DB 테이블의 스키마가 변경
- 일반적으로 DB테이블에 존재하는 컬럼을 필드로 가진다.(개발자가 수정 가능)
public class User{
private Integer id;
private String name;
private String email;
public User(String email){
this.email = email
}
public void changeEmail(String email){
this.email = email;
}
}
DTO(Data Transfer Object)
- layer 간 통신 용도로 쓰이는 데이터 전달 객체
- 데이터를 전달하는 용도이기 때문에 내부에 로직을 가지지 않아야 한다.
public class Dto {
private String data;
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
VO(Value Object)
- 값 자체를 나타내는 개체
- 로직을 가지는 메서드를 만들 수 있다.
- VO 내부의 값이 고유하므로 필드의 값이 같은 경우 같은 객체라 생각해야 한다.
- equals(), hashcode()를 override하여 같은 객체임을 명시
public class Vo{
private String value1;
private int value2;
public Vo(String value1, int value2) {
this.value1 = value1;
this.value2 = value2;
}
public String getValue1() {
return value1;
}
public int getValue2() {
return value2;
}
@Override
public boolean equals(Object o){
if(this == o) return true;
if(o==null || getClass() != o.getClass()) return false;
Vo vo = (Vo) o;
return this.value1.equals(vo.getValue1()) && this.value2.equals(vo.getValue2());
}
@Override
public int hashCode(){
return Objects.hash(value1, value2);
}
}