Skip to content
This repository has been archived by the owner on Aug 13, 2022. It is now read-only.

용어정리 dto vo entity dao

Kim, Joo Hyuk edited this page Dec 19, 2021 · 1 revision

결론

DTO-VO-Entity 와 같은 정의들은 "왜" 필요한가?

데이터를 담은 객체들이 계층을 오고가며 역할과 기능이 달라지는 경우에 정의(definition)의 혼동을 막고자 사용되면 이롭다. @JooHyukKim

DTO-VO-Entity 와 같은 정의들은 "꼭" 필요한가?

아니다.
데이터를 담은 객체들이 복수의 역할을 수행하는 경우에는 오히려 혼동을 일으킨다.
그러니 실제로 객체들이 계층별로 역할, 또는 기능이 달라진 경우가 아닌 이상 커뮤니케이션 과정에서 피해야한다.
대신 데이터Model와 같은 단순한 단어들로 커뮤니케이션 이루어져야한다. @JooHyukKim

용어 정리

DTO (Data Transfer Object)

Martin Folwer 가 "P of EAA" 라는 책에서 언급하기 시작한 객체 사용 패턴. 계층간 데이터를 주고 받는 횟수를 줄이기 위해 여러 객체/데이터를 하나의 객체에 담아 데이터를 전달하기 위한 목적으로 쓰인다. 여러 레이어 사이에서 DTO를 사용할 수 있다. 화면 구성을 위해 다양한 타입의 데이터를 필요로 하는 경우가 많은 View와 Controller 사이에서 주로 활용한다. DTO는 값 전달만 해야하기 때문에 getter/setter 메소드만 포함한다. 이 외의 비즈니스 로직은 포함하지 않는다.

VO (Value Object)

VO는 비즈니스/도메인의 값 자체를 표현하는 객체이다. VO는 객체들의 주소가 달라도 값이 같으면 동일한 것으로 여긴다.

예를 들어, 고유번호가 서로 다른 만원 2장이 있다고 생각하자. 이 둘은 고유번호(주소)는 다르지만 10000원(값)은 동일하다.

VO는 getter 메소드와 함께 비즈니스 로직도 포함할 수 있다. 단, setter 메소드는 가지지 않는다. 또, 값 비교를 위해 equals()와 hashCode() 메소드를 오버라이딩 해줘야 한다.

Entity

Entity는 실제 DB 테이블과 매핑되는 핵심 클래스이다. 이를 기준으로 테이블이 생성되고 스키마가 변경된다. 따라서, 절대로 Entity를 요청이나 응답값을 전달하는 클래스로 사용해서는 안 된다. Entity는 id로 구분된다. 그리고 비즈니스 로직을 포함할 수 있다

DAO

DAO 는 DB 를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트를 말한다.


출처