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

2023. 3. 22. 08:53·개발중/Java
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
반응형
저작자표시 (새창열림)

'개발중 > Java' 카테고리의 다른 글

[JAVA] ConcurrentHashMap 에 대해서  (0) 2024.11.04
Java 개발자라면 알아야하는 질문들이라길래 나는 잘 알고 있는가 ?  (0) 2023.08.07
[JAVA] 문자열 받고, 초성으로 반환해주자.  (0) 2023.01.25
[Gson] String => Object Array 활용하기  (0) 2022.11.29
65279 아스키코드가 나와서 문자열 비교 안됨 ?! 😅  (1) 2022.10.19
'개발중/Java' 카테고리의 다른 글
  • [JAVA] ConcurrentHashMap 에 대해서
  • Java 개발자라면 알아야하는 질문들이라길래 나는 잘 알고 있는가 ?
  • [JAVA] 문자열 받고, 초성으로 반환해주자.
  • [Gson] String => Object Array 활용하기
Binsoo
Binsoo
내 트러블 슈팅
  • Binsoo
    정수빈 기술블로그임.
    Binsoo
  • 전체
    오늘
    어제
    • 빈수 개발자 개발 일기 (948)
      • 개발중 (635)
        • Spring Boot (95)
        • Spring Security (2)
        • Spring Batch (6)
        • Spring Boot & Redis (13)
        • Java Persistence API (JPA) (28)
        • Web (42)
        • Rest Api (7)
        • Spring Concurrency Control (3)
        • Redis (8)
        • Kubernetes (k8s) (4)
        • MYSQL (35)
        • AirFlow (15)
        • Docker (2)
        • Git (22)
        • Linux (9)
        • JSON Web Tokens (JWT) (4)
        • Troubleshooting (88)
        • Swagger (0)
        • Vue.js (52)
        • Java (74)
        • html (12)
        • C (5)
        • jQuery (15)
        • JavaServer Pages (JSP) (17)
        • Arduino (1)
        • JavaScript (35)
        • Amazon Web Services (AWS) (11)
        • Algorithm (9)
        • 참고 기능 (18)
        • mongo (2)
      • PROJECT (27)
        • 스프링부트+JPA+몽고 API 개발 (3)
        • MINI (2)
        • 게시판 (3)
        • vue 프로젝트 (1)
        • JPA 사이드 프로젝트 기록 (17)
      • TEAM STUDY (156)
        • 가상 면접 사례로 배우는 대규모 시스템 설계 기초 (8)
        • 한 권으로 읽는 컴퓨터 구조와 프로그래밍 (12)
        • NAVER DEVELOPER (4)
        • LINUX (23)
        • PYTHON (19)
        • SERVER (8)
        • 알고리즘 코딩 테스트 스터디 (31)
        • 쿠버네티스 (40)
        • 대세는 쿠버네티스 [초급~중급] (11)
      • BOOK (0)
      • 자격증 (61)
        • 리눅스 1급 - 필기 기록 (19)
        • 네트워크 관리사 (2)
        • 네트워크 관리사 2급 - 실기 기록 (21)
        • 네트워크 관리사 2급 - 필기 기록 (16)
        • 정보처리 (2)
      • 직장인 대학원 (27)
        • 기록 (3)
        • 캐글 스터디 (3)
        • R (12)
        • MLOps (9)
      • 논문 (5)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    리눅스 마스터 1급 정리
    네트워크 관리사 자격증
    스프링
    파이썬
    알고리즘
    REST API
    java
    리눅스 마스터 1급
    네트워크 관리사 학점
    BackendDevelopment
    쿠버네티스 스터디
    Git 저장소
    리눅스 마스터 요약
    리눅스 마스터
    jpa
    redis
    리눅스 1급 요약
    리눅스 마스터 1급 요약
    쿠버네티스
    네트워크 관리사 2급
    springboot
    네트워크 관리사 요약
    Spring
    네트워크 관리사 2급 실기
    네트워크 관리사 실기
    VUE
    파이썬 알고리즘
    git
    docker
    네트워크 관리사
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Binsoo
[Java] 객체 매핑 라이브러리 ModelMapper
상단으로

티스토리툴바