반응형
이 글은 자바/스프링 개발자를 위한 실용주의 프로그래밍 (김우근 저, 위키북스)를 읽고 개인적으로 정리한 내용입니다. 내용에 오류가 있을 수 있으니 정확한 내용은 위 책을 참고해주시기 바랍니다.
VO (Value Object)
- 클래스에 final만 붙인다고 불변 객체가 아니다.
- 심지어 객체 내 필드가 모두 final이라고 반드시 불변 객체인 것은 아니다.
- final이 붙은 멤버 변수의 참조 객체가 불변성을 지키지 않는다면 무용지물이다.
- 각 필드도 오브젝트라면 그 오브젝트도 불변이어야 함
- Lombok 라이브러리의 @Value 어노테이션을 사용하면 VO로 사용 가능해진다.
- VO가 되기 위한 3가지 조건
- 불변성
- 값은 변하지 않는다. 숫자 1은 영원히 숫자 1
- 불변성을 유지하기 위한 예시(불변 객체, VO는 아님)
- 값 변경 시에는 아예 새로운 객체를 리턴해 멀티 쓰레드 환경에서도 문제 없이 동작할 수 있도록 한다.
- 일반 setter처럼 동작하면 두 쓰레드가 동시에 객체를 참조할 때 기대하는 값이 리턴되지 않을 확률이 매우 높아진다.
- 동등성
- 값의 가치는 항상 같다. 땅에 적힌 숫자 1과 책에 적힌 숫자 1은 같은 1이다
- 두 개의 VO 클래스가 있을 때 equals를 실행하면 같다고 나와야 한다
- 자가 검증
- 값이 그 자체로 올바르다. 즉, 1이 1.01이지 않을지 고민하지 않아도 된다
- 객체를 생성할 때 자체적인 Validation이 있어야 한다
- 불변성
DTO (Data Transfer Object)
- DTO는 객체라고 보기도 어렵다
- 그냥 데이터 하나하나 전달하기 불편해서 한 덩어리로 전송하기 위해 만들어진 객체이다
- 멤버 변수들 private으로 선언해놓고 Getter, Setter 다 쓸 거면 뭐 하러 private 선언하는지 모르겠다
- DTO는 어떤 상황에서도 쓸 수 있는거니까 언제 써야한다 언제 쓰지마라라고 너무 편협하게 생각하지 말자
DAO (Data Access Object)
- DAO의 존재 목적은 도메인 로직과 데이터베이스 연결 로직을 분리하기 위함이다
Entity
- Entity란 데이터로 표현하려는 유무형의 대상이다.
- Entity는 JPA에서 만들어진 용어가 아니고 JPA에서의 Entity는 Entity의 하위 개념이다.
- Entity의 하위 개념
- 도메인 Enitity
- 식별 가능하고 비즈니스 로직을 갖고 있으며, 조금 특별하게 관리되는 클래스로 만들어진 객체
- DB Entity
- 그냥 데이터베이스 분야에서 어떤 유무형의 객체를 표현하기 위해 사용하던 단어
- JPA Entity
- 관계형 데이터베이스에 있는 데이터를 객체로 매핑하는데 사용되는 클래스
- 도메인 Enitity
출처
- 자바/스프링 개발자를 위한 실용주의 프로그래밍 (김우근 저, 위키북스)
반응형
'개발 > 객체지향' 카테고리의 다른 글
[OBJECTS 책 공부] 역할, 책임, 협력 (0) | 2022.01.17 |
---|