본문 바로가기

개발중/Java

[Java] 객체 매핑 라이브러리 ModelMapper

728x90
반응형

ModelMapper

ModelMapper는 Java 객체 간 속성 값을 자동으로 매핑해주는 라이브러리이다. 

 

주로 데이터 전송 객체(DTO)와 도메인 객체 간의 변환 작업에 사용된다. 

이 라이브러리를 사용하면 수동으로 속성 값을 복사하는 작업을 줄이고 코드를 간결하게 유지할 수 있다.

ModelMapper의 주요 특징

- 자동 매핑: 

소스 객체와 대상 객체의 동일한 이름의 프로퍼티를 자동으로 매핑해줍니다. 이를 통해 수동으로 데이터를 복사할 필요가 없다.

유연한 매핑 전략: 

속성 이름이 다르거나 매핑 전략이 다른 경우, ModelMapper를 확장하여 사용자 정의 매핑 전략을 구현할 수 있다.

높은 성능: 

ModelMapper는 매핑 과정을 최적화하기 위해 동적 코드 생성 및 캐싱을 사용하여 높은 성능을 제공한다.

타입 안전성: 

ModelMapper는 명시적인 타입 정의를 사용하여 런타임 시의 오류 가능성을 줄이고, 타입 안전성을 제공한다.

ModelMapper를 사용하면 개발자가 직접 객체 간의 속성 값을 복사하는 방식을 사용하는 것보다 간결한 코드를 작성할 수 있으며, 유지보수하기도 쉽다. 

 

ModelMapper 예시

의존성 추가

implementation 'org.modelmapper:modelmapper:2.4.4'
<!-- https://mvnrepository.com/artifact/org.modelmapper/modelmapper -->
<dependency>
    <groupId>org.modelmapper</groupId>
    <artifactId>modelmapper</artifactId>
    <version>3.0.0</version>
</dependency>

 

ModelMapper 빈 등록

@Configuration
public class ModelMapperConfig {

    @Bean
    public ModelMapper modelMapper() {
        return new ModelMapper();
    }
}

 

QnaCreateCond 클래스에서 toQnaDTO 메서드 수정

@Data
public class QnaCreateCond {

    @NotBlank(message = "lqnTitle을 입력해주세요.")
    String lqnTitle;

    @NotBlank(message = "lqnContent을 입력해주세요.")
    String lqnContent;

    public LabelQnaDTO toQnaDTO(ModelMapper modelMapper){
        return modelMapper.map(this, LabelQnaDTO.class);
    }
}

 

서비스에서 toQnaDTO 메서드 사용 시 ModelMapper 인스턴스 전달

@Service
public class QnaService {

    private final ModelMapper modelMapper;

    // 생략...

    public void createQna(QnaCreateCond qnaCreateCond) {
        LabelQnaDTO labelQnaDTO = qnaCreateCond.toQnaDTO(modelMapper);
        // 다른 로직 처리...
    }
}

 

 

이렇게 구성하면 QnaCreateCond 객체와 LabelQnaDTO 객체의 동일한 프로퍼티 이름을 가진 값들이 자동으로 매핑된다.

ModelMapper는 꽤 유연한 라이브러리이며, 매핑 전략을 변경하거나 커스터마이징도 가능하다.

 

자세한 내용과 사용법은 ModelMapper 공식 문서를 참고하세요.

 

 

 

728x90
반응형