엔티티(Entity)
DTO와 구분하여 사용하는 이유 (Entity의 필요성)
계층별 관심사 분리
코드 구성의 단순화
REST API 스펙의 독립성 확보
매퍼의 필요성
Mapper 클래스 직접 구현
@Component // (1)
public class MemberMapper {
// (2) MemberPostDto를 Member로 변환
public Member memberPostDtoToMember(MemberPostDto memberPostDto) {
return new Member(0L,
memberPostDto.getEmail(),
memberPostDto.getName(),
memberPostDto.getPhone());
}
}
mapping framework
MapStruct (mapping framework)의 필요성
MapStruct
MapStruct 프레임워크 추가
// Lombok과의 순서가 중요
dependencies {
implementation 'org.projectlombok:lombok:1.18.24'
implementation 'org.mapstruct:mapstruct:1.5.1.Final'
annotationProcessor "org.projectlombok:lombok:1.18.24"
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.1.Final'
}
MapStruct 정상적으로 매핑하기 위한 조건
MapStruct 기반의 매퍼(Mapper) 만들기
@Mapper(componentModel = "spring")
public interface Mapper {
Member memberPostDtoToMember(MemberPostDto memberPostDto);
Member memberPatchDtoToMember(MemberPatchDto memberPatchDto);
MemberResponseDto memberToMemberResponseDto(Member member);
// [변경 될 객체] [메서드]([변경 할 객체])
}
@Mapper
실제로 구현된 객체는 Gradle의 build task를 실행하면 자동으로 생성