DTO (Data Transfer Object)
- 개요
- 데이터를 전달하기 위한 객체임
- 계층 간의 데이터 교환을 위해서 사용됨.
- View 와 Controller 사이에서 자주 활용됨.
- 특징
- Getter / Setter 메서드를 포함합니다
- 데이터를 쉽게 넣고 , 빼기 위한 메서드를 제공
- 비즈니스 로직을 미포함
데이터 전송
에 집중합니다.
- 별도의 비즈니스 로직을 포함하면 안됩니다.
- Getter / Setter 메서드를 포함합니다
- 예제
// 가변 객체 예시 public class MemberDto { private String name; private int age; // Getter, Setter 생략 } // 불변 객체 예시 public class MemberDto { private final String name; private final int age; // Getter, Setter 생략 }
- 불변하는 객체의 경우 final 로 생성자를 통해서만 초기화가 가능하도록 합니다.
- 가변 객체의 경우 별도의
Setter
를 사용할 수 있습니다.
- 또한 VO와 다르게
equals()
,hashcode()
를 별도로 가지지 않습니다.- 왜냐?
- DTO 를 객체간 비교할 필요가 1도 없습니다
- 말했지 않나요! DTO는 데이터를 전달하기 위한 하나의 수단일뿐이라고!
- 왜냐?
VO ( Value Object )
- 개요
- 값을 표현하기 위한 객체입니다.
- 특징
- 불변 객체
- 일단 생성되면 상태가 변하면 안됩니다.
- 값의 비교
equals()
혹은hashCode()
메서드를 오버라이딩하여 값을 비교합니다.
equals()
는- 재정의 하지 않는 경우
객체의 고유한 주소값으로 비교
하게 됩니다.
- 일반적으로 객체가 가진 값에 대한 비교로 객체간 비교하는 것이 올바른 경우가 많습니다.
- 그냥 IDE 자체의 기능을 사용해서 만드는것이 편함.
- 재정의 하지 않는 경우
- 비즈니스 로직의 포함
- VO는 값의 표현 뿐만 아니라, 그에 관련된 연산도 수행할 수 있음.
- 불변 객체
- 예시
public class Money { private final String currency; private final int value; // Getter, equals(), hashCode() 생략 }
- 항상 불변하는 값을 가져야합니다.!
Entity
- 개요
- DB의 테이블과 직접적으로 매핑되는 객체임
- 특징
- 식별자(ID) 가 존재합니다.
- 각 Entity 는 고유한 식별자(ID) 로 구분된다고 합니다.
- 비즈니스 로직을 포함 가능
- 가변 객체와 불변 객체 모두 가질 수 있습니다.!
- 식별자(ID) 가 존재합니다.
- 예시
public class Member { private final Long id; private final String email; // 나머지 코드 생략 }
표
분류 | DTO | VO | ENTITY |
정의 | 레이어간 데이터 전송용 객체 | 값 표현용 객체 | DB 테이블 매핑용 객체 |
상태 변경 여부 | 가변 또는 불변 객체 | 불변 객체 | 가변 또는 불변 객체 |
로직 포함 여부 | 로직을 포함할 수 없다. | 로직을 포함할 수 있다. | 로직을 포함할 수 있다. |
회사에서는 사실상 ENTITY 이자 DTO 로 사용중인거같다 ㅋㅋ;
그걸 리팩토링 하는게 1차적 목표
Uploaded by N2T
'자바 > 스프링입문객체지향' 카테고리의 다른 글
[3단원]다형성이 지원되지 않는 언어 (0) | 2023.08.26 |
---|---|
[3단원]캡슐화: 정보 은닉 (0) | 2023.08.26 |
[3단원]다중 상속과 자바 (0) | 2023.08.25 |
[3단원]상속과 인터페이스 (0) | 2023.08.25 |
[3단원]상속과 T 메모리 (0) | 2023.08.25 |