DAO(Data Access Object)
데이터베이스의 data에 접근하여 CRUD 기능을 수행하는 객체
DB와 연결할 Connection까지 설정되어 제공되는 경우(ex) MyBatis) 는 필요 없다.
서비스와 DB를 연결하는 Repostitory package가 DAO의 예시이다.
DTO(Data Transfer Object) - 데이터 전송 객체
비지니스 계층과 프레젠테이션 계층간 데이터 교환을 하기 위해 사용하는 객체이다.
- 비지니스 계층 : 데이터베이스나 외부 시스템과 상호 작용하여 데이터를 검색하거나 수정하는 작업 수행
- 프레젠테이션 계층 : 웹 클라이언트의 요청 및 응답 처리
DTO는 Domain model의 복사본으로, 다양한 표현 계층 Logic을 추가하여 사용된다.
(Model은 Persistence를 갖는다.)
로직을 가지지 않는 순수한 데이터 객체이다.
getter와 setter만 가진 클래스이다.
✅ getter와 setter에서, get과 set뒤에 나오는 이름이 프레임워크에서 정의하는 Property 이름이다. (멤버변수가 아님)
Entity와 DTO를 분리하는 이유
Entity는 DB와 매핑되고, DTO는 Entity에서 Controller나 Service 또는 바깥에 전달하고 싶은 것만 담은 그릇이다.
1. Entity의 값이 변경되는 것을 막는다.(Entity 보호)
2. Entity 내에서 전달하고 싶은 데이터만 전달할 수 있다.
3. View 변경시 Entity가 변경되는 것을 막는다.
4. 순환 참조를 예방한다.
5. 모델링 코드와 validation 코드(dto에서 사용, @NotNull, @NotEmpty..)를 분리할 수 있다.
VO(Value Object)
값을 위해 사용되고 Read-Only이다.
즉 dto와 달리 값을 중간에 바꿀 수 없다.(setter 존재X)
VO 비교에서 동등성 비교(값만 같으면 같다)를 위해 equals()과 hashcode()를 오버라이딩한다.
✅ 같은 객체인지 ==(동일성=같은 주소이면 같다)로 판단하는 equals를 값만 비교(주소비교X)하는 함수로 오버라이딩하고,
hashcode로 같은 객체이면 객체 식별 고유값이 같도록 오버라이딩한다.
참고
https://lemontia.tistory.com/591
'Spring > Spring 개발 상식' 카테고리의 다른 글
@Builder와 @Getter, @Setter (1) | 2023.07.10 |
---|---|
DTO 생성 방법 (0) | 2023.07.10 |
Spring Security Test (0) | 2023.07.08 |
DB : 기본키, 외래키, 제약조건 (1) | 2023.07.06 |
Mock test : @AutoConfigureMockMvc, MockMvc, JsonPath (0) | 2023.07.05 |