@Entity
@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String email;
private String phoneNumber;
}
: DTO는 계층간 데이터 교환이 이루어질 수 있도록 하는 객체임
@Getter
@Setter
public class MemberDto {
private String name;
private int age;
}
@Getter
@AllArgsConstructor
public class UserVo {
private String name;
private Integer age;
private String address;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
UserVo userVo = (UserVo) o;
return Objects.equals(name, userVo.name) && Objects.equals(age, userVo.age) && Objects.equals(address, userVo.address);
}
@Override
public int hashCode() {
return Objects.hash(name, age, address);
}
}
이유1. 관심사의 분리
DTO는 각 계층끼리 주고받는 데이터의 개념
Entity는 데이터의 핵심 비즈니스 로직을 담는 객체
Vo는 값 그자체
이유2. 유효성 검사 로직 및 불필요한 코드 분리하기
이유3. API스팩의 유지
- 만약 Etity 클래스를 통해 API 응답을 한다는 가정하에

- 이런 값이 전달됨

- 이상황에서 갑자기 파람값 이름이라도 바꿔야하면 다른 사용자에게 까지 영향을 주고 수정작업을 해야함
- 그러므로 DTO 를 이용하여 분리해 독립성을 높이고 변경이 전파되는 것을 방지해야 합니다.
