웹 개발자 양성과정을 진행하면서 학습을 위한 작은 프로젝트 부터

세미,파이널 두 차례의 팀 프로젝트 까지 여러 프로젝트를 만들었었는데,

그때 데이터를 가공 및 전달하기 위한 객체는 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를 가지는 것을 지양함

 

 

 

 

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기