MapStruct
MapStruct란?
MapStruct는 Java 애플리케이션에서 DTO와 Entity 간 변환을 자동화해주는 컴파일 타임 매핑 프레임워크이다.
MapStruct는 코드 작성 없이 인터페이스만 정의하면 자동으로 매핑 구현체를 생성해주기 때문에 성능이 뛰어나고 유지보수가 용이하다.
📌 주요 특징
- 컴파일 타임에 매핑 코드 생성 → 성능 우수
- 명시적인 인터페이스 기반 매핑 → 가독성, 안정성 우수
- Lombok, Spring과 호환성 우수
- 다양한 매핑 전략 제공 (필드명 자동 매핑, 수동 매핑 가능)
사용 방법
✅ 의존성 추가 (Gradle 기준)
dependencies {
implementation 'org.mapstruct:mapstruct:1.5.5.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'
}
✅ 기본 매퍼 인터페이스 정의
@Mapper(componentModel = "spring")
public interface UserMapper {
UserDTO toDto(User user);
User toEntity(UserDTO userDTO);
}
✅ DTO / Entity 클래스 예시
public class UserDTO {
private String name;
private String email;
// getter, setter
}
public class User {
private String name;
private String email;
// getter, setter
}
✅ 사용 예시
@Service
@RequiredArgsConstructor
public class UserService {
private final UserMapper userMapper;
public UserDTO getUserDto(User user) {
return userMapper.toDto(user);
}
}
📌 고급 기능
🎯 다른 필드명 매핑
@Mapper
public interface UserMapper {
@Mapping(source = "userName", target = "name")
UserDTO toDto(User user);
}
🎯 날짜 포맷팅 매핑
@Mapping(source = "createdAt", target = "createdDate", dateFormat = "yyyy-MM-dd")
🎯 중첩 객체 매핑
@Mapping(source = "address.city", target = "city")
📌 장점과 단점
✅ 장점
- 성능이 우수한 컴파일 타임 코드 생성 방식
- Entity ↔ DTO 매핑 코드 간결화
- 에러 발생 시 컴파일 타임에 확인 가능
❌ 단점
- 초기 설정과 학습 필요
- 복잡한 매핑은 커스터마이징이 필요할 수 있음
댓글남기기