1. DAO (Data Access Object)
데이터베이스의 데이터에 접근하기 위한 객체이다.
- DB 접근 로직 / 비즈니스 로직을 분리하기 위한 용도로 사용한다. 그 이유는 다른 로직에서 DB를 통해 데이터를 얻어오려면 DB Driver와 Connection 객체를 생성하여 작업량이 많아지는데, DB와 연결하는 객체를 따로 만들어 관리함으로써 비효율적인 작업량을 줄일 수 있다.
- DB에 접속하여 데이터 CRUD(Create, Read, Update, Delete) 작업을 시행하는 클래스이다.
- DB 접근 로직은 코드 간결화, 모듈화, 유지보수 등의 목적을 위해 별도로 생성하는 것이 좋다.
2. DTO (Data Transfer Object)
계층 간 데이터 교환을 하기 위해 사용하는 객체이다. 자바 빈즈(Java Beans)를 의미한다.
- 어떠한 로직도 가지지 않는 순수한 데이터 객체이다.
- getter, setter 메소드만 가지고 있는 클래스이다.
- setter를 활용하기 때문에 가변(mutable)의 성격을 가지고 있는 클래스이다.
- 하지만 DB에서 꺼낸 값을 임의로 변경할 필요가 없기 때문에 DTO클래스에는 setter가 없다. (대신 생성자에서 값을 할당한다.)
- DTO는 MVC중 Model쪽에 속하여 MVC 흐름 속에서 데이터가 교환될 수 있도록 하는 객체이다. Controller는 View - Model의 데이터를 주고 받을 때 별도의 DTO를 주로 사용한다.
- Entitiy의 개념을 포함하고 있다.
ex) 유저가 입력한 데이터를 DB에 넣는 과정에서,
유저가 자신의 브라우저에서 데이터를 입력하여 form에 있는 데이터를 DTO에 넣어서 전송한다.
해당 DTO를 받은 서버가 DAO를 이용하여 데이터베이스로 데이터를 집어넣는다.
3. VO (Value Object)
각 계층간 데이터를 교환하기 위한 객체이다. ➡ DTO와 동일한 역할을 한다.
- 값 오브젝트로써 값을 위해 쓰인다. read-Only 특징(사용하는 도중에 변경 불가능하며 오직 읽기만 가능)을 가진다.
- 어떠한 로직도 가지지 않는 순수한 데이터 객체이다.
- getter 메소드만 가지고 있는 클래스이다.
- setter를 활용하지 않기 때문에 불변(immutable)의 성격을 가지고 있는 클래스이다. DTO와 유사하지만 DTO는 setter를 가지고 있어 값이 변할 수 있다.
📝 DTO와 VO 차이점
DTO는 인스턴스 개념이고 VO는 리터럴 값 개념이다.
VO는 값들에 대해 Read-Only를 보장해줘야 존재의 신뢰성이 확보되지만 DTO의 경우는 단지 데이터를 담는 그릇의 역할일 뿐 값은 그저 전달되어야 할 대상일 뿐이다.
값 자체에 의미가 있는 VO와 전달될 데이터를 보존해야하는 DTO의 특성상 개념이 다르다.
📝 DAO, DTO, VO 예시
- DAO
:데이터베이스에 접근하여 CRUD를 수행하는 객체
public interface BoardDAO {
public void create(BoardDTO dto); //게시판 글 작성
public BoardDTO read(int boardNo); //게시판 글 읽기
public void update(BoardDTO dto); //게시판 글 수정
public void delete(int boardNo); //게시판 글 삭제
}
- DTO
:데이터베이스에서 가져온 결과를 저장하는 객체
public class DTO {
private int boardNO;
Private String title;
Private String content;
Private String writer;
Private Date regDate;
}
- VO
:컨트롤러와 뷰 사이에서 데이터를 전달하는 객체
public class BoardVO {
private int boardNo;
private String title;
private String content;
private String writer;
}
게시판 목록을 보여주기 위해서 DAO는 데이터베이스에서 게시판 리스트를 가져오고, 가져온 결과를 BoardDTO 객체에 저장하여 반환한다. 후에는 Service나 Controller를 이용하여 게시판 글 목록을 View에 전달하는데, 이 때 필요한 데이터만을 가지고 있는 BoardVO 객체를 생성하여 뷰에 전달해준다.
Reference
https://annajin.tistory.com/69
'java' 카테고리의 다른 글
[java] 이것이자바다 Chapter02 변수와타입 확인문제(1~11번) 정답 (0) | 2023.09.04 |
---|---|
[Java] 변수와 타입 (0) | 2023.08.24 |
[spring] intelliJ로 스프링 프로젝트 환경설정하기 (4) | 2023.07.14 |
Java-반복문(for,break,continue) (0) | 2023.03.13 |