DTO, VO, DAO & Entity

가람·2022년 7월 21일
0

데이터 객체를 위한 class 는 위와같이 다양한 종류가 있다.
정확히 알고 쓰기위해 개념을 정리해본다.
아래의 개념을 잘 숙지하고, 데이터 객체의 이름을 짓는다면

DTO ( Data Transfer Object )

이름 그대로 데이터 교환을 위한 객체이다.
로직을 가지지 않는 순수한 데이터 객체 ( only getter & setter ) 로 구성된다.
하지만, setter 를 사용하기 보단 생성자를 이용해서 값을 할당한다.
계층간 데이터 교환을 할때 사용되며, DB에서 service 나 controller 등으로 보낼때 주로 사용된다.
Request DTO, Response DTO 등으로 많이 사용한다.

VO ( Value Object )

특정한 비즈니스 값을 담는 객체이다.
DTO 와 유사하지만 VO 는 Read-Only 속성을 가진다. ( DTO 에는 setter 가 있다 )

Entity

DB table 과 1:1로 직접 매핑되는 클래스이다.
DB 의 column 들을 필드로 가지는 객체이며, 테이블에 없는 컬럼을 필드로 가져서는 안된다.
또한 다른 클래스를 상속받거나 인터페이스의 구현체여서는 안된다.
스프링에서는 클래스에 @Entity 어노테이션을, 필드에 @Column, @Id 등의 어노테이션을 사용한다.
Entity에는 setter 보단 builder 사용이 권장된다. entity의 일관성을 해칠 수 있기 때문이다.

DAO ( Data Access Object )

실제로 DB 에 접근하는 객체이다.
프로젝트의 서비스와 실제 DB를 연결하는 역할을 한다.
JPA에서는 Repository 객체라고 볼 수 있다.
( 엄밀히 말하면 DAO 와 Repository 는 다른 패턴이다. 참고 : http://egloos.zum.com/aeternum/v/1160846 )

결론

데이터 객체에 위와 같이 다양한 종류가 있는 이유는 관심사의 분리를 위한것이다.
서비스 로직과 DB 접근 로직을 분리하고, Table 과 1:1 매칭된 객체와 실제 유저의 request / response 객체를 분리함으로써 코드의 단순화 및 유지보수에 도움이 된다.

참고
https://velog.io/@ohzzi/Entity-DAO-DTO%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%99%9C-%EC%82%AC%EC%9A%A9%ED%95%A0%EA%B9%8C

profile
hello world :)

0개의 댓글