스프링을 처음 접할 때 Entity, DTO, VO, Dao, Repository 등등의 용어가 굉장히 헷갈렸다.
그 중에서도 데이터와 가까이(?) 있는 Entity, DTO, VO 세 가지를 비교해보려고 한다.
일단 가장 구분이 쉬운 것은 Entity이다.
Entity는 DB와 가장 가깝다.
테이블과 매핑되는 객체이다.
각 id를 통해 entity를 구분한다.
entity에는 @Getter와 @Setter가 없다.
대신 메소드를 활용해 변경할 수 있다.
다음으로 VO는 객체의 불변성을 보장하는 객체이다.
서로 다른 이름을 가지고 있는 객체더라도 모든 속성 값이 같다면 두 인스턴스는 같다고 할 수 있다.
따라서 VO는 Object 클래스의 equals()와 hashCode()를 오버라이딩 해야한다. (IDE의 기능 활용)
마지막으로 DTO는 계층간의 데이터 교환을 위한 객체이다.
Entity, VO와는 다르게 로직을 가질 수 없고, @Getter와 @Setter는 가질 수 있다.
DTO가 필요한 이유는 한 객체의 모든 정보를 클라이언트에 노출할 필요가 없기 때문이다.
예를 들어, 상품 데이터에 id, name, price, cost_price, regi_date, modi_date와 같은 컬럼들이 있다고 하자.
그러면 원가 정보인 cost_price, regi_date, modi_date 와 같은 정보들은 노출시키고 싶지 않을 때 id, name, price 만을 태우는 DTO 객체를 만들 수 있다.
'스프링' 카테고리의 다른 글
[Spring] directory 구성 (계층형/도메인형) (0) | 2021.12.01 |
---|---|
[Spring] Controller의 파라미터를 받는 여러 가지 방법 (Parameter Mapping 방법) (0) | 2021.12.01 |
토비의 스프링 4장 예외 (0) | 2021.11.22 |