개발을 하다보면 언어에서 기본적으로 제공되는 데이터타입을 별도로 만든 클래스 단위로 묶어서 관리해야 한다. 일반적으로 VO, DTO 라고 불리는 클래스 들인데 나름대로 정리한 규칙과 구분방법을 정리해보았다. JPA Entity와는 구분한다. 통합해서 관리할 경우 Dirty Checking으로 원치 않게 DB 수정이 일어날 수 있다. set{필드명} 형태의 Setter 메소드는 만들지 않는다. 값 변경의 의도와 목적을 명확히 나타낼 수 있도록 approve, reject 같은 이벤트 형태로 작성하도록 한다. 일반적으로 VO, DTO 를 불변, 가변으로 구분짓는데 내 경우는 그렇게 구분하지 않고 있다. 대부분 불변으로 하되 VO든 DTO든 필요에 따라 얼마든지 가변이 될 수 있고 이벤트 형태로 변경의 의..