본문 바로가기
  • 실행력이 모든걸 결정한다
Spring Series/Spring Framework

[Spring] ModelMapper

by 김코더 김주역 2022. 12. 15.
반응형

ModelMapper란?

ModelMapper은 서로 다른 두 오브젝트의 필드들을 매핑시켜주는 클래스로 도메인 오브젝트를 통신용 DTO 오브젝트로 만들어 줄 때 유용하게 사용된다.

source 오브젝트의 필드값들 중 원하는 필드들을 destination 오브젝트에 매핑해주는 과정을 자동으로 수행해주기 때문에, 매핑 코드를 일일이 getter/setter 메소드에 작성하는 귀찮은 작업을 할 필요가 사라진다. ModelMapper은 기본 매핑 정책을 가지고 있기 때문에 map() 메소드를 통해 간단히 매핑을 수행해도 되고, 여러분들이 원한다면 정책을 바꾸거나 커스터마이징을 할 수도 있다.

 

예를 들어, 아래 예시를 보자. Order 클래스는 Customer, Address 타입의 필드를 가지고 있다.

// Assume getters and setters on each class
class Order {
  Customer customer;
  Address billingAddress;
}

class Customer {
  Name name;
}

class Name {
  String firstName;
  String lastName;
}

class Address {
  String street;
  String city;
}

 

그리고 Order 오브젝트의 필드값들을 매핑시켜줄 OrderDTO 클래스다.

// Assume getters and setters
class OrderDTO {
  String customerFirstName;
  String customerLastName;
  String billingStreet;
  String billingCity;
}

 

ModelMapper의 map() 메소드를 통해 ModelMapper의 특정 매핑 정책대로 필드값들을 매핑시켜줄 수 있다.

ModelMapper은 Bean으로 등록해서 사용해도 된다.

ModelMapper modelMapper = new ModelMapper();
OrderDTO orderDTO = modelMapper.map(order, OrderDTO.class);

 

[테스트 코드]

assertEquals(order.getCustomer().getName().getFirstName(), orderDTO.getCustomerFirstName());
assertEquals(order.getCustomer().getName().getLastName(), orderDTO.getCustomerLastName());
assertEquals(order.getBillingAddress().getStreet(), orderDTO.getBillingStreet());
assertEquals(order.getBillingAddress().getCity(), orderDTO.getBillingCity());

 

여기서 필자는 궁금했다. 두 필드의 이름이 다른데 어떻게 성공적으로 매핑이 가능할까?

기본 매핑 정책인 MatchingStrategies.STANDARD은 필드 이름을 쪼갠 토큰들을 어떤 순서로든 매칭시킬 수 있기 때문이다. OrderDTO의 billingStreet 필드는 필드 이름이 billing, street으로 쪼개져서 토큰이 되기 때문에 Order의 street 필드와 매핑이 될 수 있는 것이다.

 

각 정책의 구체적인 정보와 상세 설정은 아래에 첨부한 포스팅들에서 잘 설명되어 있기 때문에 ModelMapper의 설명은 이쯤에서 마치겠다.

 

 

ModelMapper 학습에 도움이 되는 자료

- 공식 문서

https://javadoc.io/doc/org.modelmapper/modelmapper/2.3.0/org/modelmapper/ModelMapper.html

 

ModelMapper - modelmapper 2.3.0 javadoc

Latest version of org.modelmapper:modelmapper https://javadoc.io/doc/org.modelmapper/modelmapper Current version 2.3.0 https://javadoc.io/doc/org.modelmapper/modelmapper/2.3.0 package-list path (used for javadoc generation -link option) https://javadoc.io/

javadoc.io

- 아래 포스팅에서는 ModelMapper의 각종 매칭 전략과 토큰에 대해 깊이 이해할 수 있었음

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=kbh3983&logNo=220988245343

 

[JAVA] ModelMapper Customizing

주의!! 일부 버전에서 Custom Mapping 이 됬다 안됬다하는 버그가 있음 아오....하루종일을 날렸네........

blog.naver.com

- 아래 포스팅에서는 ModelMapper의 폭넓은 사용 예시를 통해 전반적인 개념을 이해하는 데 도움이 되었음

https://devwithpug.github.io/java/java-modelmapper/

 

ModelMapper 제대로 알고 사용하자!

개요

devwithpug.github.io

 

반응형

댓글