Controller, Service, ServiceImpl,DAO,VO
DAO는 데이터베이스의 데이터에 접근하기 위한 객체이다.
DTO는 계층 간 데이터 교환을 하기 위해 사용하는 객체이다. DTO는 로직을 가지지 않는 순수한 데이터 객체이고, getter&setter 메서드만 가진 클래스이다.
유저가 입력한 데이터를 데이터베이스에 넣는 과정을 보자
- 유저가 자신의 브라우저에서 데이터를 입력하여 form에 있는 데이터를 DTO에 넣어서 전송한다.
- 해당 DTO를 받은 서버가 DAO를 이용하여 데이터베이스로 데이터를 집어넣는다.
계층 간 데이터교환을 위한 객체(Java Beans)이다.
- DB의 데이터를 Service나 Controller등으로 보낼 때 사용하는 객체이다.
- DB의 데이터가 Presentation Logic Tier로 넘어올때는 DTO로 변환되어 오고가는 것이다.
- 로직을 갖고 있지 않은 순수한 데이터 객체이며, getter/setter 메서드만을 갖는다.
- 또한 Controller Layer에서 Response DTO 형태로 Client에 전달한다.
Spring Boot DTO 예제 코드
@Getter @Setter
class ArticleDTO {
private String title;
private String content;
private String writer;
}
VO값 오브젝트로써 값을 위해 쓰인다. read-Only 특징(사용하는 도중에 변경불가능하며 오직 읽기만 가능)을 가진다.
Spring Boot VO 예제 코드
@Getter @Setter
@Alias("article")
class ArticleVO {
private Long id;
private String title;
private String contents;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Article article = (Article) o;
return Objects.equals(id, article.id);
}
@Override
public int hashCode() {
return Objects.hash(id);
}
}
DTO는 가변의 성격을 가진 클래스이며 데이터 전송을 위해 존재한다.(getter/setter)
그에 반해 VO는 값 그 자체의 의미를 가진 불변 클래스(Read-Only)를 의미한다.(getter만 존재)
DTO는 인스턴스 개념이라면 VO는 리터럴 개념.
즉, VO는 특정한 비즈니스 값을 담는 객체이고, DTO는 Layer간의 통신 용도로 오고가는 객체를 말한다.
참고
DAO, DTO, VO,Entity 차이
https://velog.io/@ha0kim/DAO-DTO-VO-%EC%B0%A8%EC%9D%B4