Post

[Java] ModelMapper

๐Ÿ“Œ ๋“ค์–ด๊ฐ€๋ฉฐ

๊ณ„์ธตํ˜• ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์งœ๋‹ค ๋ณด๋ฉด ์—”ํ‹ฐํ‹ฐ(Entity) โ†” DTO ๋ณ€ํ™˜ ์ฝ”๋“œ๋ฅผ ๋์—†์ด ์ž‘์„ฑํ•˜๊ฒŒ ๋œ๋‹ค. dto.setName(entity.getName()) ๊ฐ™์€ ๋ฐ˜๋ณต์ ์ธ ๋งคํ•‘์€ ์ง€๋ฃจํ•˜๊ณ  ์‹ค์ˆ˜ํ•˜๊ธฐ๋„ ์‰ฝ๋‹ค. ์ด ๋ฒˆ๊ฑฐ๋กœ์›€์„ ๋œ์–ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ModelMapper๋‹ค.

ModelMapper๋ž€? Java์—์„œ ๊ฐ์ฒด ๊ฐ„์˜ ๋งคํ•‘์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ. ์ฃผ๋กœ ์—”ํ‹ฐํ‹ฐ์™€ DTO ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜์— ์‚ฌ์šฉ๋˜์–ด, ๋ฐ˜๋ณต์ ์ธ ๋งคํ•‘ ์ฝ”๋“œ๋ฅผ ์ตœ์†Œํ™”ํ•œ๋‹ค.


1. ์™œ ModelMapper๋ฅผ ์“ธ๊นŒ?

์žฅ์ ์„ค๋ช…
๊ฐ„ํŽธํ•œ ๊ตฌ์„ฑ๋ณ„๋„ ์„ค์ • ์—†์ด ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋ณธ ๋งคํ•‘ ์ˆ˜ํ–‰ โ†’ ์ดˆ๋ณด์ž๋„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉ
์ž๋™ ๋งคํ•‘ํ•„๋“œ๋ช…์ด ์ผ์น˜ํ•˜๋ฉด ์ž๋™ ๋งคํ•‘, ๋ถˆ์ผ์น˜ ํ•„๋“œ๋งŒ ์ˆ˜๋™ ์„ค์ •
์œ ์—ฐ์„ฑํŠน์ • ํ•„๋“œ์˜ ๋ณ€ํ™˜ ๋ฐฉ๋ฒ•ยท์ œ์™ธ ๋“ฑ์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ด ๊ฐ€๋Šฅ
1
2
3
PersonEntity  โ”€โ”€ModelMapper.map()โ”€โ”€โ–บ  PersonDTO
  name, age          (ํ•„๋“œ๋ช… ์ผ์น˜)        name, age
                    ์ž๋™์œผ๋กœ ๊ฐ’ ๋ณต์‚ฌ

2. ์‚ฌ์šฉ ์˜ˆ์‹œ

๋จผ์ € ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•œ๋‹ค. (Maven ๊ธฐ์ค€)

1
2
3
4
5
6
<!-- pom.xml -->
<dependency>
    <groupId>org.modelmapper</groupId>
    <artifactId>modelmapper</artifactId>
    <version>2.4.3</version>
</dependency>

๊ทธ๋‹ค์Œ map() ๋ฉ”์†Œ๋“œ ํ•œ ๋ฒˆ์œผ๋กœ ์—”ํ‹ฐํ‹ฐ๋ฅผ DTO๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// ModelMapper ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
ModelMapper modelMapper = new ModelMapper();

// ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด ์ƒ์„ฑ
PersonEntity personEntity = new PersonEntity();
personEntity.setName("John Doe");
personEntity.setAge(25);

// DTO๋กœ ๋งคํ•‘ (ํ•„๋“œ๋ช…์ด ๊ฐ™์œผ๋ฉด ์ž๋™ ๋งคํ•‘)
PersonDTO personDTO = modelMapper.map(personEntity, PersonDTO.class);

// ๋งคํ•‘ ๊ฒฐ๊ณผ ํ™•์ธ
System.out.println(personDTO.getName()); // ์ถœ๋ ฅ: John Doe
System.out.println(personDTO.getAge());  // ์ถœ๋ ฅ: 25

PersonEntity(์—”ํ‹ฐํ‹ฐ)์™€ PersonDTO(์ „์†ก ๊ฐ์ฒด)์˜ ํ•„๋“œ๋ช…์ด ๊ฐ™์œผ๋ฏ€๋กœ, map() ํ˜ธ์ถœ๋งŒ์œผ๋กœ ๋‘ ๊ฐ์ฒด ๊ฐ„ ํ•„๋“œ๊ฐ€ ์ž๋™ ๋งคํ•‘๋œ๋‹ค.


๐Ÿ“ ์ •๋ฆฌ

๊ฐœ๋…ํ•œ ์ค„ ์ •์˜
ModelMapper๊ฐ์ฒด ๊ฐ„ ๋งคํ•‘์„ ์ž๋™ํ™”ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
map()์›๋ณธ ๊ฐ์ฒด๋ฅผ ๋Œ€์ƒ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜
์ž๋™ ๋งคํ•‘ ๊ธฐ์ค€ํ•„๋“œ๋ช… ์ผ์น˜ (๋ถˆ์ผ์น˜ ํ•„๋“œ๋Š” ์ˆ˜๋™ ์„ค์ •)

ModelMapper๋Š” โ€œํ•„๋“œ๋ช…์ด ๊ฐ™์œผ๋ฉด ์•Œ์•„์„œ ์˜ฎ๊ฒจ์ค€๋‹คโ€๋Š” ๋‹จ์ˆœํ•œ ๊ทœ์น™์œผ๋กœ ๋ฐ˜๋ณต์ ์ธ ๋งคํ•‘ ์ฝ”๋“œ๋ฅผ ํฌ๊ฒŒ ์ค„์—ฌ์ค€๋‹ค. ์—”ํ‹ฐํ‹ฐ-DTO ๋ณ€ํ™˜์ด ์žฆ์€ ํ”„๋กœ์ ํŠธ์—์„œ ํŠนํžˆ ์œ ์šฉํ•˜๋‹ค.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.