반응형

Entity는 실제 테이블과 매핑되는 객체

DTO는 계층간 데이터 교환을 위한 객체

 

나는 여태 VO를 Entity + DTO의 용도로서 사용하였는데

VO는 포괄적인 명칭으로서 값을 가지는 객체를 말한다.

도메인의 계층 간 과도한 침투, 유지보수의 문제와 요청/응답 형식의 규격화 등의 이유로

Entity와 DTO가 나뉘어야 함을 알았다.

 

Mybatis에서는 이러한 구분이 없거나 개념이 조금 다르다.

VO를 쓰고 Entity는 쓰지 않는다.

JPA에서 Entity와 DTO로 명확히 분리하게 되는 것 같다.

 

Entity가 테이블과 매핑만을 담당하게 되면서

DTO는 요청과 응답을 받아 보여주는 순수한 데이터 객체가 된다.

 

Spring에서 화면단에서 넘어 온 값을 검증하기 위한 어노테이션은 DTO에 들어가야 한다.

Entity에는 테이블 간의 연관관계 표현 및 매핑을 위한 어노테이션이 들어가야 한다.

 

Entity와 DTO가 나뉘었으므로

DTO로의 변환이 중간에 필요하게 된다.

DTO는 계층 사이를 오가지만 주로 controller와 view 사이를 오가게 된다.

 

------------------------------------------------------------------

객체에 setter가 있으면 가변객체가 되는데

불변객체여야 하는 경우에는 setter가 있으면 안된다

그럴 때는 builder 패턴을 통해서 생성자를 초기화 해줄 수 있으며

생성 이후에는 변경되지 않아 객체 불변성이 유지된다.

 

이때 equals() 와 hashcode()도 재정의 되어야 하는데

모든 클래스는 object를 상속하면서 equals()를 가지며 값을 비교하여 자신이 true임을 검증하고

key값은 해시값으로 관리되는데 hashcode()는 자신을 제외한 인스턴스는 false를 리턴하기 때문이다.

equals()와 hashcode() 모두 true여야 하므로 둘 모두 @Override 하여 필요한 기준에 맞게 작성해주어야 한다.

반응형