1. DTO와 VO 차이는 무엇인가?
1. DTO (데이터 전달용 객체)
- Data Transfer Object
- 각 계층(레이어) 간 데이터 교환을 위한 객체 (Controller, Service)
- 값이 변할 수 있다. DTO dto1(1)!= DTO dto2(1)
- 데이터 접근 이외의 기능을 가지지 않음(정렬, 직렬화 등 데이터 표현을 위한 기능은 가질 수 있음)
- 로직을 갖고 있지 않는 순수한 데이터 객체이며, getter/setter 메서드만 보유한 클래스
- 하지만 DB에서 꺼낸 값을 임의로 변경할 필요가 없기 때문에 DTO클래스에는 setter가 없다..?
- (대신 생성자를 통해 속성 값들을 초기화 하게 만들어 불변 객체로 만들면 DTO가 전달 과정 중에 변조되지 않음을 보장할 수 있다.)
- 속성값이 모두 같다고 해서 같은 객체가 아니다.
- setter 존재시 가변, setter 존재하지 않을 경우 불변 객체 보장(생성자를 통해 속성 값 초기화 하는 경우)
1-1. 사용예시
2. VO(값 표현용)
- 모든 레이어에서 사용 가능
- 값이 변하지 않음 VO vo1(1)== VO vo2(1)
- 특정한 비즈니스 로직을 가질 수 있음 (밑에 getHalfValue())
- setter 포함하면 안되고 생성자를 통해서만 값을 초기화해야 함
- 값 그 자체를 표현하는 객체(값이 같다면 동일한 객체)이기 때문에 불변 객체이다.
- 속성 값이 모두 같으면 같은 객체이다
- 서로 다른 이름을 가진 VO의 인스턴스가 모든 속성이 같다면 같은 객체이다 -equals()와 hasCode()를 오버 라이딩
- ->(값에 의해 동등성이 판단되는 객체)
- hashCode리턴값이 같으면 equals()리턴값도 같은지 파악 후 둘다 같을 경우 동등객체로 취급(완전한 vo는 이 두개 메서드 오버라이딩 해줘야 한다.)
아래 : HashSet, HashMap, Hashtable의 동등 비교 방식 (https://prde.tistory.com/49)
2-1. 사용예시
3. Entity(JPA~)
- 실제 DB의 테이블과 매핑되는 클래스
- id로 구분된다.
- 로직을 포함할 수 있다.
- Entity Class는 데이터 베이스와 매핑되어 있기 때문에 요청이나 응답 값을 전달하는 클래스로 사용하면 안된다(DTO사용)
- Entity Class를 기준으로 테이블이 생성되고 스키마가 변경되기 때문에
'Back-end > Spring-핵심& webMVC' 카테고리의 다른 글
Spring MVC <component-scan>, <annotation-config>, <annotation-driven> (0) | 2022.12.30 |
---|---|
Web.xml, DispatcherServlet, ContextLoaderListener 각각의 역할 및 관계 (0) | 2022.12.30 |
SpringBootServletInitializer (0) | 2022.12.10 |
Springboot Swagger- SpringSecurity 연결 설정 (0) | 2022.10.11 |
비동기 처리를 위한 ThreadPoolTaskExcutor (0) | 2021.11.14 |