Base/개념정리

Model 클래스 구분

findmypiece 2021. 3. 12. 13:24
728x90

개발을 하다보면 언어에서 기본적으로 제공되는 데이터타입을

별도로 만든 클래스 단위로 묶어서 관리해야 한다.

일반적으로 VO, DTO 라고 불리는 클래스 들인데

나름대로 정리한 규칙과 구분방법을 정리해보았다.

  1. JPA Entity와는 구분한다. 
    통합해서 관리할 경우 Dirty Checking으로 원치 않게 DB 수정이 일어날 수 있다.
  2. set{필드명} 형태의 Setter 메소드는 만들지 않는다.
    값 변경의 의도와 목적을 명확히 나타낼 수 있도록
    approve, reject 같은 이벤트 형태로 작성하도록 한다.
  3. 일반적으로 VO, DTO 를 불변, 가변으로 구분짓는데
    내 경우는 그렇게 구분하지 않고 있다.
    대부분 불변으로 하되 VO든 DTO든 필요에 따라 얼마든지 가변이 될 수 있고
    이벤트 형태로 변경의 의도와 목적을 명확히 표현할 뿐이다.
    해서 나는 Value Object(VO), Data Transfer Object(DTO)라는
    본래 뜻에 가깝게 구분하려고 노력한다. 예를 들면 아래와 같다.
  • VO: 언어에서 기본적으로 제공하는 데이터 타입을 업무에서 사용되는
    의미있는 명칭으로 묶어서 관리하는 클래스

DTO: 언어에서 기본적으로 제공하는 데이터 외에 VO를 포함해서
타 서비스와 통신규격에 맞게 묶어서 관리하는 클래스

728x90