Spring - DTO vs VO vs Entity
DTO
-
Data Transfer Object
-
데이터 전달용
-
데이터를 전달하기 위한 객체
-
데이터를 주고받을 때 사용한다.
-
계층 간 데이터를 전달할 때 사용한다.
-
ex ) Cotroller 에서 Service 로 데이터를 전달 할 때
-
ex ) Service 에서 Repository 로 데이터를 전달 할 때
-
-
메서드는 오직 getter/setter 메서드만 갖고, 다른 로직을 갖지 않는다.
-
의도적으로 setter 를 지우고, 변수에 final 을 붙여서 불변 DTO 로 만들 수도 있다.
-
속성 값이 모두 같다고 같은 객체는 아니다.
VO
-
Value Object
-
값 표현 용
-
불변 객체이어야만 한다. ( 값이 변경되는게 없어야 함. final 사용 )
-
생성자를 통하여 값을 집어 넣는다.
-
그 외의 뭔가 계산하여 return 하는 로직 같은 것이 포함되어도 된다.
-
속성값이 모두 같으면 같은 객체여야 하기 때문에, Equals 와 haseCode 를 재정의 하여 사용한다.
Entity
-
Database 와 매핑하여 사용
-
절대로 값 전달용으로 사용해서는 안된다.
-
setter 를 사용하지 않도록 하는게 좋다.
-
안에서 필요한 메서드를 선언하여, 그로 인하여만 값이 바뀌게끔 해야 한다.
-
해당 데이터를 전달 할 일이 있으면, DTO 로 바꿔서 전달하여야 한다.