728x90
이전 포스팅에서 DTO 사용 시 고려해야 할 주요 문제점과 해결책에 대해서 알아보았습니다.
코드의 품질과 유지보수성을 높이기 위해서 MapStruct를 사용하는 것이 좋다고 합니다.
MapStruct란❓
MapStruct는 자바 애플리케이션에서 객체 간의 매핑을 자동으로 생성해 주는 코드 생성기입니다.
주로 DTO와 엔티티 간의 변환을 쉽게 처리하기 위해 사용됩니다. MapStruct는 컴파일 타임에 매핑 코드를 생성하므로 런타임에 비해 성능이 좋고, 타입 안전성을 보장합니다.
주요 기능은 다음과 같습니다.
자동 매핑 코드 생성
- MapStruct는 매핑 인터페이스를 정의하면, 이를 기반으로 매핑 구현 코드를 자동으로 생성해 줍니다. 이를 통해 매핑 로직을
수동으로 작성할 필요가 없습니다.
명확한 매핑 정의
- 매핑 규칙을 인터페이스와 어노테이션으로 명확히 정의할 수 있어, 가독성과 유지보수성이 높아집니다.
성능
- 컴파일 타임에 매핑 코드를 생성하므로, 런타임
성능에 영향을 미치지 않습니다. 런타임에 매핑을 수행하지 않아 빠릅니다.
타입 안정성
- 컴파일 타임에 매핑 오류를 발견할 수 있어, 런타임 오류를 줄일 수 있습니다.
커스터마이징
- 매핑 규칙을 커스터마이즈 하거나 복잡한 변환 로직을 구현할 수 있는 방법을 제공합니다.
MapStruct 사용 방법
1. 의존성 추가
dependencies {
implementation 'org.mapstruct:mapstruct:1.5.5.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'
}
2. 매핑 인터페이스 정의
@Mapper
public interface CarMapper {
CarMapper INSTANCE = Mappers.getMapper(CarMapper.class);
CarDto carToCarDto(Car car);
Car carDtoToCar(CarDto carDto);
}
3. 매핑 사용
Car car = new Car();
CarDto carDto = CarMapper.INSTANCE.carToCarDto(car);
이렇게 MapStruct를 사용하면 DTO와 엔티티 간의 변환을 간편하게 관리할 수 있어, 복잡한 변환 로직을 효율적으로 처리할 수 있습니다.
위와 같이 @Mapper 어노테이션을 지정해 주면 복잡한 매핑코드를 사용하지 않고 간편하게 매핑을 할 수 있다...!
Dto를 그대로 사용하는 것 보다 Mapper로 감싸는 것이 좋다는 것은 알았지만 MapStruct의 존재를 몰랐기 때문에 MapStruct를 실제 프로젝트에 적용을 함으로써 좀 더 가독성과 유지보수성이 좋은 코드가 되었다.
찾아보니깐 MapStruct는 전세계적으로 많이 사용되는 라이브러리라고 한다.. 그 이유는 간편한 매핑, 성능, 타입 안정성, 유지 보수성 등 다양한 장점이 있기 때문이다.
추후에 MapStruct좀 더 공부를 하고 완벽히 이해를 해야겠다
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2024.08.13 - @Builder(access=AccessLevel.PRIVATE) 옵션이란❓ (0) | 2024.08.13 |
---|---|
[TIL, 일일 회고] 2024-08.11 - 캐싱 전략 (0) | 2024.08.12 |
[TIL, 일일회고] 2024.08.10 - DTO 사용 시 고려해야 할 주요 문제점과 해결책 (0) | 2024.08.10 |
[TIL, 일일회고] 2024.08.09 - @Data를 지양하자 (0) | 2024.08.09 |
[TIL, 일일 회고] 2024.08.08 - gitignore (gradle-wrapper.jar &properties) (0) | 2024.08.08 |