웹 개발자 양성과정을 진행하면서 학습을 위한 작은 프로젝트 부터
세미,파이널 두 차례의 팀 프로젝트 까지 여러 프로젝트를 만들었었는데,
그때 데이터를 가공 및 전달하기 위한 객체는 VO 라는 이름으로 생성하여
그 안에 필드(속성), 생성자, getter 와 setter 그리고 toString 메서드 를 만들고 VO 하나만 사용했었다.
과정 수료 이후 취업 인터뷰를 위해 MVC 패턴에 대한 내용을 찾아보면서 공부하다가
VO뿐만 아니라 DTO 라는 이름으로 객체를 정의해서 사용한다는 것을 알게 되었다.
딱 잘라서 이건 이렇게, 저건 저렇게 무조건 써야 해! 라는 것은 아니지만
개념을 구분지은 "목적"이 있기에 구별해서 사용하면 좋지 않을까? 싶다.
DTO(Data Transfer Object) : 계층간 데이터 전달 목적의 객체
- getter(데이터 읽어오기)와 setter(데이터 저장,셋팅)를 가지며 데이터 전달 목적 외에 다른 로직은 필요치 않음
VO(Value Object) : 값(Value)자체를 표현하기 위한 객체, 객체의 불변성을 보장 (read-only : 읽기 전용)
- DTO와 다르게 데이터 전달 목적 로직 외의 다른 로직을 가질 수 있음
- 객체의 불변성을 보장하기 위해 setter 대신 생성자 및 빌더를 이용하여 데이터의 변조를 제한하도록 함
- 필드(속성)값이 모두 같으면 같은 객체로 간주, 이를 나타내기 위해서 hashcode() 와 equals() 메서드를 overriding(메서드 재정의) 해서 사용함
ENTITY : 데이터베이스의 테이블과 매칭되는 클래스로 DB의 존재하는 컬럼과 동일한 속성(필드)을 가짐
- 상속을 받거나 구현체여서는 안됨
- DB 테이블의 컬럼과 동일한 필드(속성)을 가져야 함
- 실질적으로 DB와 동일한 값을 가지므로 데이터 변조를 막기 위해 setter를 가지는 것을 지양함
'Programming' 카테고리의 다른 글
MongooseError [MongooseServerSelectionError]: bad auth : Authentication failed (0) | 2022.04.26 |
---|---|
리팩토링이란 무엇인가? what is Refactoring (0) | 2022.04.18 |
REST API / RESTful 에 대해 (0) | 2022.03.30 |
MVC란? (0) | 2022.02.24 |
매개변수와 인자 Parameter & Argument (0) | 2022.02.16 |
최근댓글