본문 바로가기
Tech/Java

ObjectMapping 기술, MapStruct는 뭘까?

반응형

Object Mapping 어디까지 해봤니?
참조 링크


Object Mapping 라이브러리인 MapStruct

  • API 버전 별 객체, 비즈니스 로직, 레이어간 객체와 객체간 매핑시 사용한다.

 

등장 배경

  • Spring Framework 개발 환경을 예로, 각 레이어(Controller, Service, Repository 등)에서
    데이터를 주고 받거나, 비즈니스 로직에서 정의된 객체 타입을 다른 타입으로 변환하는 일이 빈번하게 일어난다.

 

문제점

  • 소개된 배경으로 인하여, 그동안 개발자가 코드를 작성할때는 다음과 같은 문제가 생겼다.
    1. 반복적이고, 코드 중복이 발생
      lombok의 @Builder를 이용하여 코드량을 줄일 순 있지만, 이마저도 반복적이고 코드 중복이 쉽게 발생한다.
    2. 실수하기 쉽다.
    3. 코드 생산성을 떨어뜨린다.
    4. 비즈니스 로직에 섞여, 코드가 복잡해지고 소개된 모든 이유를 통틀어서 결국 유지보수가 힘들어진다.

 

해결 방법: MapStruct

  • Java 개발 환경에서 객체 간 매핑에 대해 코드를 자동으로 생성해주는 매핑 라이브러리
    Annotation Processor를 사용해 컴파일시 매핑 코드를 생성한다.

 

MapStruct의 장점

  1. 컴파일시 설정된 방식으로 오류를 확인할 수 있다. (코드 생성시)
  2. 리플렉션을 사용하지 않기 때문에 매핑 속도가 빠르다.
  3. 디버깅이 쉽다.
  4. 생성된 매핑 코드를 눈으로 직접 확인할 수 있다.

 

사용법

  1. 기본적으로 같은 이름, 같은 Type의 속성은 자동으로 매핑된다.
  2. 다른 이름의 속성을 매핑하기 위해서는 @Mapping 어노테이션을 이용, source와 target을 지정하여 매핑한다.
  3. 여러 개의 객체를 하나로 합치는 작업도 가능
  4. @Mapping 어노테이션의 ignore 기능으로 속성을 무시할 수도 있다.
  5. MapperConfig를 통해 속성을 지정할 수 있다.

 

정책

  1. unmappedSourcePolicy
    IGNORE, WARN, ERROR
    매핑시 Soruce.aFiled가 사용되지 않는다면 컴파일 오류
    ERROR로 설정시 매핑되지 않았다면 컴파일 오류가 발생

  2. unmappedTargetPolicy
    IGNORE, WARN, ERROR
    매핑시 Target.aFiled가 사용되지 않는다면 컴파일 오류

  3. typeConversionPolicy
    IGNORE, WARN, ERROR
    타입 변환시 유실이 발생할 수 있을 때 정책
    long -> int로 값을 넘길때 유실이 발생, 이런 경우의 정책을 설정할 수 있다.

 

전략

  1. nullValueMappingStrategy
    RETURN_NULL(default 설정)
    RETURN_DEFAULT
    Source가 null일 때 정책이다.

  2. nullValuePropertyMappingStrategy
    SET_TO_NULL(default)
    SET_TO_DEFAULT
    IGNORE
    Source의 필드가 null일때 정책
728x90
반응형

'Tech > Java' 카테고리의 다른 글

Java 직렬화(Serializable)란?  (0) 2021.09.21
팀원들과 동일한 코드 스타일을 적용해보자!!  (0) 2021.08.08
올바른 Optional 사용법  (0) 2021.08.08