프로젝트 기초 개념_DTO, DAO, VO 넌 누구냐?
안녕하세요 jju_developer입니다.
이번시간에는 프로젝트를 진행하면서 헷갈렸던 기초 개념에 대해 정리를 해보겠습니다.
프로젝트를 시작하게 되면 DTO, DAO, VO에 대한 용어에 대하여 많이 접하게 됩니다.
DTO, DAO, VO 무엇인가...
DAO
- DAO(Data Access Object)
dao는 데이터베이스의 data에 접근하기 위한 객체입니다.
DataBase에 접근 하기 위한 로직 & 비지니스 로직을 분리하기 위해 사용합니다. - DAO는 DB의 data에 접근하기 위한 객체이기 때문에
직접 DB에 접근하여 데이터를 삽입, 삭제, 조회 등 조작할 수 있는 기능을 수행합니다.
DTO
- DTO(Data Transfer Object)
dto는 계층 간 데이터 교환을 하기 위해 사용하는 객체로,
DTO는 로직을 가지지 않는 순수한 데이터 객체(getter & setter 만 가진 클래스)입니다. - 유저가 입력한 데이터를 DB에 넣는 과정을 보겠습니다.
- 유저가 자신의 브라우저에서 데이터를 입력하여 form에 있는 데이터를 DTO에 넣어서 전송합니다.
- 해당 DTO를 받은 서버가 DAO를 이용하여 데이터베이스로 데이터를 집어넣습니다.
다시말하자면,
dto는 이름 그대로 데이터 전송(이동) 객체라는 의미를 가지고 있습니다.
계층간 데이터 교환을 위한 객체(Java Beans)입니다.
DB의 데이터를 Service나 Controller 등으로 보낼 때 사용하는 객체를 말합니다.
즉, DB의 데이터가 Presentation Logic Tier로 넘어올때는 DTO로 변환되어 오고가는 것입니다.
로직을 갖고 있지 않는 순수한 데이터 객체이며, getter/setter 메서드만을 갖고있으며,
Controller Layer에서 Response DTO 형태로 Client에 전달합니다.
@Getter @Setter
class customerDTO {
private String id;
private String pwd;
private String phoneNumber;
}
VO
- VO(Value Object) 값 object로써 값을 위해 쓰입니다.
read-Only 특징(사용하는 도중에 변경 불가능하며 오직 읽기만 가능)을 가집니다. - DTO와 유사하지만 DTO는 setter를 가지고 있어 값이 변할 수 있습니다.
다시 정리하자면,
VO는 자바에서 단순히 값 타입을 표현하기 위해 불변 클래스(Read-Only)를 만들어 사용합니다.
색으로 예를 들면 분홍은 Color.PINK, 빨강은 Color.RED 이렇게 단순히 값만 표현하기 위해 getter기능만 존재하는 것 입니다.
VO의 핵심 역할은 equals()와 hashcode() 를 오버라이딩 하는 것입니다.
VO 내부에 선언된 속성(필드)의 모든 값들이 VO 객체마다 값이 같아야, 똑같은 객체라고 판별합니다.
VO는 Getter와 Setter를 가질 수 있으며, VO는 테이블 내에 있는 속성 외에 추가적인 속성을 가질 수 있으며, 여러 테이블(A, B, C)에 대한 공통 속성을 모아서 만든 BaseVO 클래스를 상속받아서 사용할 수 도있습니다.
[맥쌤 꿀팁] VO(Value Object)와 DTO(Data Transfer Object)
DTO와 VO의 용도는 데이터의 수집과 전달에 사용할 수 있다는 공통점이 있다.
양쪽 모두 파 라미터나 리턴 타입으로 사용하는 것이 가능하다.
다만 VO가 보다 데이터베이스와의 거리가 가깝다.
즉, VO는 테이블의 구조를 이용해서 작성되는 경우가 더 많다.
DTO의 경우는 보다 화면과 가깝다.
화면에서 전달되는 데이터를 수집하는 용도로 사용하는 경우가 많다.
스프링 MVC를 이용하는 경우 DTO는 검증을 위한 처리가 들어간다.
스프링은 Controller에 전 달되는 데이터에 대해서 검증하는 기능을 추가할 수 있는데,
이러한 상황에서는 별도의 DTO 를 구성해서 사용한다.
아직은 정확하게 감은 안오지만 우선,
개념만 정리하고 차차 프로젝트 하면서 감을 잡으며!
예시도 같이 첨부해서 올리도록 하겠습니다.
그럼 오늘도 수고하셨습니다