728x90
스프링을 공부하면서 VO가 있다는 것은 알았지만, DTO만 사용했기 때문에 DTO와 VO의 차이가 무엇인지에 대해 궁금했다.
생각이 난 김에 DTO와 VO의 차이에 대해 간단히 알아보려고 한다.
DTO와 VO를 혼용해서 쓰는 경우가 많다.
→ 왜? core J2EE Patterns이라는 책에서 데이터 전달용 객체를 VO로 정의하다가 TO (현재는 데이터를 의미하는 D를 붙여 DTO로 사용)로 바꾸었기 때문
DTO (Data Transfer Object)
데이터 전달용
계층 간 데이터 교환을 위해 사용하는 객체. DTO에 데이터를 담아 전달한다.
데이터를 담은 private변수들과 이 변수들을 조작할 수 있는 getter&setter 메서드로 구성되어 있다.
-> 다른 로직들은 담고 있지 않다! 왜? 순수하게 데이터 전달만 하기 때문에
따라서 한마디로 말해서 데이터를 담을 수 있는 바구니 라고 생각하면 편할 것 같다.
VO (Value Object)
값 표현용
말 그대로 값을 가진 객체
데이터를 가지고 있다는 것에서 보면 DTO와 유사하지만, VO의 큰 특징은 값이 같으면 같은 객체라고 보는 것이다. (주소가 아닌 값 자체를 비교함)
Company com1=new Company("SSAFY");
Company com2=new Company("SSAFY");
com1.hashCode();
com2.hashCode(); // com1과 com2의 해시값이 동일하다 -> com1과 com2은 같은 객체이다
또한, VO는 값 자체를 표현하게 때문에 불변해야 한다. 따라서 read-only한 속성을 가지고 있다. 한번 값을 설정하면 중간에 값을 변경할 수 없다.
VO는 getter 메서드와 함께 비지니스 로직도 포함할 수 있지만, setter 메서드는 가지지 않는다.
결론
분류 | DTO | VO |
역할 | 계층 간 데이터 교환을 위한 객체 | 값을 표현하기 위한 객체 |
상태 변경 여부 | 변경 가능 | read-only |
로직 포함 여부 | getter/setter외의 다른 로직 없음 | 로직 포함 가능 |
+) 참고
728x90
'Computer Science > Web programming' 카테고리의 다른 글
[CS] MSA 구조 정리 (0) | 2022.08.04 |
---|---|
[Web] TDD 방법론 (1) | 2022.05.24 |
[Web] REST vs RESTful vs REST API(RESTful API) (2) | 2021.12.31 |
[Web] Spring의 AOP, Interceptor, Filter (4) | 2021.12.14 |
[Web] servlet & jsp의 개념 / MVC pattern, Front Controller Pattern (2) | 2021.10.09 |