///////
Search
🌱

Value Object, Data Transfer Object, Data Access Object 대해서 각각 설명해 주세요.

DTO (Data Transfer Object)

계층(Controller, View, Business) 간 데이터 교환을 위한 Java Beans
Java Beans란?
JSP에서 객체를 가져오기 위한 기법으로 데이터 전달 오브젝트 파일 DTO(Data Transfer Object)와 동일시
자바로 작성된 컴포넌트들 즉, 클래스(Class)를 일반적으로 말함
비즈니스 로직을 가지지 않는 순수한 데이터 객체이며, getter/setter와 같은 메서드만 가진 클래스
DB에서 데이터를 얻어 Service, Controller Layer로 보낼 때 사용하는 객체

DAO (Data Access Object)

실제 DB에 접근하는 객체
비즈니스 로직DB에 접근하기 위한 로직을 분리하기 위해 사용
웹 애플리케이션이 요청을 받게 되면 스레드를 생성한다.
이 때, 비즈니스 로직이 분리되어 있지 않으면 DB로부터 데이터를 얻어오기 위해 엄청 많은 커넥션이 일어나므로 DAO를 하나 만들어 DB 전용 객체로만 쓰기 위함
Service와 DB를 연결하는 역할
직접 DB에 접근하여 데이터를 삽입/삭제/조회 등의 기능을 수행
MVC패턴의 Model이 DAO의 역할을 수행
DAO는 CRUD 작업만 이루어지고 이를 받아 작업을 하는 Layer가 Service 클래스이다.

VO(Value Object)

값을 위해서 쓰인다.
Read-Only 특징 → 읽기만 가능
DTO vs VO
VO는 getter만 존재한다.
DTO는 setter도 있기 때문에 값이 변할 수 있다.
그 이유는 VO는 값들에 대해 Read-Only만 보장해야 신뢰성이 확보되지만 DTO는 단지 계층 간 데이터 교환을 위한 목적이므로 보장해야할 것이 없다.
즉, 값 자체에 의미가 있는 리터럴 개념의 VO와 계층 간 데이터를 제대로 전달해야 하는 인스턴스 개념의 DTO라고 생각하면 된다.

Entity

실제 DB 테이블과 매칭되는 클래스
최대한 외부에서 엔티티의 getter를 사용하지 않도록 해당 엔티티 안에서 필요한 로직을 구현
그리고 여기서 구현한 메서드는 주로 Service Layer에서 사용
Entity와 DTO 분리 이유
View Layer와 DB Layer의 역할을 철저하게 분리하기 위함
실제 DB 테이블과 매핑되는 Entity가 변경되면 여러 클래스에 영향을 끼친다. 반면에, View와 통신하는 DTO 클래스(Request / Response 클래스)는 자주 변경되므로 분리하는 것이 바람직
View 내에서 getter만을 이용해서 원하는 정보를 표시하기가 어려운 경우 발생 → 이런 경우Entity 클래스 내에 표현을 위한 필드나 로직을 추가하면 Entity 클래스의 순수성을 깨뜨림