데이터 전송 및 이동을 위해 생성되는 객체를 의미
User.java
public class User {
public Long id;
public String name;
public String email;
public String password;
public DetailInformation detailInformation;
//비즈니스 로직, getter, setter 등 생략
}
UserController.java
@GetMapping
public RepositoryEntity<User> showArticle(@PathVariable Long id) {
User user = userService.findByUd(id);
return ResponseEntity.ok().body(user);
}
UserDto.java
public class UserDto {
public final long id;
public final String name;
public final String email;
//생성자 생략
public static UserDto from(User user) {
return new UserDto(user.getId(), user.getName(), user.getEmail());
}
}
Usercontroller.java
@GetMapping public ResponseEntity<UserDto> showArticle(@PathVariable Long id) { User user = userService.findById(id); return ResponseEntity.ok().body(UserDto.from(user)); }
DTO의 사용으로 언급된 문제 해결
- DTO를 사용함으로써 도메인 Model을 캡슐화하고, UI 화면에서 사용하는 데이터만 선택적으로 보낼 수 있으므로 앞서 언급한 문제들을 해결할 수 있다.
DTO는 클라이언트 요청에 포함된 데이터를 담아 서버 측에 전달하고, 서버 측의 응답 데이터를 담아 클라이언트에 전달하는 계층간 전달자 역할