DTO와 VO 둘 다 데이터를 담는 객체입니다. 그러나 목적과 사용 방법이 다릅니다. DTO와 VO의 차이가 궁금하다면..🧷
만약 Client로부터 DTO 객체를 받았는데, 이를 VO 객체로 변환하려면 modelMapper library를 사용하면 됩니다.
dependencies {
implementation group: 'org.modelmapper', name: 'modelmapper', version: '3.0.0'
}
singleton으로 사용하기 위해 class 대신 enum으로 선언했습니다.
import org.modelmapper.ModelMapper;
import org.modelmapper.config.Configuration;
import org.modelmapper.convention.MatchingStrategies;
public enum MapperUtil {
INSTANCE;
private ModelMapper modelMapper;
MapperUtil() {
this.modelMapper = new ModelMapper();
this.modelMapper.getConfiguration()
.setFieldMatchingEnabled(true)
.setFieldAccessLevel(Configuration.AccessLevel.PRIVATE)
.setMatchingStrategy(MatchingStrategies.STRICT);
}
public ModelMapper get() {
return modelMapper;
}
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TodoDTO {
private Long tno;
private String title;
private LocalDate dueDate;
private boolean finished;
}
@Getter
@Builder
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class TodoVO {
private Long tno;
private String title;
private LocalDate dueDate;
private boolean finished;
}
① 먼저 ModelMapper 객체를 생성합니다.
② map()을 호출합니다.
map()은 실인수로 (변환하고자 하는 객체, 변환 후의 객체)를 넣어줍니다.
public enum TodoService {
INSTANCE;
private TodoDAO dao;
private ModelMapper modelMapper;
TodoService() {
dao = new TodoDAO();
modelMapper = MapperUtil.INSTANCE.get();
}
public void create(TodoDTO todoDTO) throws Exception {
TodoVO todoVO = modelMapper.map(todoDTO, TodoVO.class);
dao.create(todoVO);
}
}