2021. 10. 11. 08:00ใBack-End ์์ ์ค/Spring Framework
๐ @Builder
์ด๊ฒ์ Builder Pattern (๋น๋ ํจํด)์ด๋ผ๊ณ ํ๋๋ฐ, ์ฌ์ฉํ ์ด์ ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋๋ก ์ฌ์ฉํ ๊ฒ์ธ๋ฐ, ์๋ ์ฅ์ ์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ ๊ฒ์ด์์
- ํ์ํ Data๋ง ์ค์ ํ ์ ์์
- ์ ์ฐ์ฑ์ ํ๋ณดํ ์ ์์
- ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์์
- ๋ถ๋ณ์ฑ ํ๋ณด ๊ฐ๋ฅ
1. ํ์ํ Data๋ง ์ค์ ํ ์ ์์
์๋ฅผ ๋ค์ด Member ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํ๋๋ฐ, id๋ผ๋ ๋ฉค๋ฒ ๋ณ์๋ ๋ฐ์์ ์ ๊ฒ ์ง๋ง, @GeneratedValue๋ฅผ ํตํด Mariadb์ Auto Increament๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ด์ฉ์๊ฐ ์ง์ ๊ฑด๋ค ํ์๊ฐ ์๋ ๊ฒ์ด์์. ์ด๋ ๊ฒ ๋งค๊ฐ๋ณ์๊ฐ ํ์์๋ ์ํฉ์ด๋ผ ํ ๋, Builder Pattern์ ์ฌ์ฉํ์ง ์์ผ๋ฉด id์ ๋๋ฏธ ๊ฐ์ ๋ฃ์ด์ฃผ๊ฑฐ๋, id๊ฐ ์๋ ์์ฑ์๋ฅผ ์๋ก ๋ง๋ค์ด์ฃผ์ด์ผ ํ๋ ๊ฒ์ด์์. ์ด๋ฌํ ์์ ์ด ์~~~~~~~~~~~~์ฒญ ๋ง๋ค๋ฉด ๋๋ฌด๋๋ฌด ํ๋ค๊ฒ์ด์์. ํ์ง๋ง ๋น๋๋ฅผ ์ด์ฉํ๋ฉด ๋์ ์ผ๋ก ์ด๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒ์ด์์.
Member member = Member.builder()
.title("ํ
์คํธ")
.content("์๋
ํ์ธ์! ์ฃผ๋ํ๋์ด์์!")
.build();
์ด๋ ๊ฒ ํ์ํ Data๋ง ์ค์ ํ ์ ์๋ Builder์ ์ฅ์ ์ Test์ฉ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋, ์ฉ์ดํ๊ณ , ๋ถํ์ํ Code์ ์์ ์ค์ด๋ ์ด์ ์ด ์๋ต๋๋ค!
2. ์ ์ฐ์ฑ์ ํ๋ณดํ ์ ์์
์๋ฅผ ๋ค์ด Member Class์ ๊ฒฐํผ ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ๋ณ์ Marriage๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค๊ณ ํ๋ค๊ณ ์น๊ณ , ์๋์ ๊ฐ์ด ์์ฑ์๋ก ๊ฐ์ฒด๋ฅผ ๋ง๋๋ Code๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณผ๊ฒ์!
// ์ด์
Member member = new Member("ํ
์คํธ", "์๋
ํ์ธ์! ์ฃผ๋ํ๋์ด์์!", "์ฃผ๋ํ๋");
// ์ดํ
Member member = new Member("ํ
์คํธ", "์๋
ํ์ธ์! ์ฃผ๋ํ๋์ด์์!", "์ฃผ๋ํ๋","๋ฏธํผ");
๊ทธ๋ ๊ฒ ๋๋ฉด ์๋กญ๊ฒ ์ถ๊ฐ๋๋ ๋ณ์ ํ๋ ๋๋ฌธ์ ๊ธฐ์กด ์ฝ๋๋ฅผ ์์ ํด์ผ ํ๋ ๋ฒ์ก์ค๋ฌ์ด ์ํฉ์ด ์๊ธฐ๋ ๊ฒ์ด์์.
๊ธฐ์กด ์ฝ๋์ ์์ด ๋ฐฉ๋ํ๋ค๋ฉด ๊ฐ๋นํ๊ธฐ ์ด๋ ต์ง๋ง, ๋น๋ ํจํด์ ์ด์ฉํ๋ฉด ๋ณ์๊ฐ ์ถ๊ฐ๋๋๋ผ๋ ๊ธฐ์กด ์ฝ๋์ ์ํฅ์ ์ฃผ์ง ์๊ฒ ํ ์ ์๋ ๊ฒ์ด์์. ์ฆ, ์ ์ฐํ๊ฒ ๊ฐ์ฒด์ ๊ฐ์ ์ค์ ํ ์ ์๋๋ก ๋์์ฃผ๋ ๊ฒ์ด์์.
3. ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์๋ค.
๋น๋ ํจํด์ ์ฌ์ฉํ๋ฉด ๋งค๊ฐ ๋ณ์๊ฐ ๋ง์์ ธ๋ ๊ฐ๋
์ฑ์ ๋์ผ ์ ์๋ ๊ฒ์ด์์.
์์ฑ์๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ์๋ ๋งค๊ฐ ๋ณ์๊ฐ ๋ง์์ง์๋ก ์ฝ๋ ๋ฆฌ๋ฉ์ด ๊ธ๊ฒฉํ๊ฒ ๋จ์ด์ง๋ ๊ฒ์ด์์.
// ์ด์
Member member = new Member("ํ
์คํธ", "์๋
ํ์ธ์! ์ฃผ๋ํ๋์ด์์!", "์ฃผ๋ํ๋");
// ์ดํ
Member member = new Member("ํ
์คํธ", "์๋
ํ์ธ์! ์ฃผ๋ํ๋์ด์์!", "์ฃผ๋ํ๋","๋ฏธํผ");
์ ์ฝ๋๋ฅผ ๋ค์ ๋ณด๋ฉด ๋๋์ฒด๊ฐ ํ ์คํธ๊ฐ ๋ญ๊ณ , ์ ๊ฐ์๊ธฐ ์๊ธฐ์๊ฐ๋ฅผ ํ๋์ง๋ฅผ ์ ์๊ฐ ์๋ ๊ฒ์ด์์. ํด๋์ค ๋ณ์๊ฐ 4๊ฐ ์ด์๋ง ๋๋ ์ด๋ ๊ฒ ์์์ฐจ๋ฆฌ๊ธฐ๊ฐ ํ๋ ๊ฒ์ด์ฃ . ํ์ง๋ง, ์๋์ ๊ฐ์ด ๋ณ๊ฒฝ์ด ๋๋ค๋ฉด ๋ฌ๋ผ์ง๋ ๊ฒ์ด์์.
Member member = Member.builder()
.title("ํ
์คํธ")
.contents("์๋
ํ์ธ์! ์ฃผ๋ํ๋์ด์์!")
.writer("์ฃผ๋ํ๋")
.marriage("๋ฏธํผ")
.build();
4. ๋ถ๋ณ์ฑ ํ๋ณด ๊ฐ๋ฅ
ํด๋์ค ๋ณ์์ final์ ์ ์ธํ๊ณ , ๊ฐ์ฒด์ ์์ฑ์ ๋น๋์๊ฒ ๋งก๊ธฐ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด์์.
๋ค๋ฅธ ์ฌ๋๊ณผ ํ์ ํ๊ฑฐ๋, ๋ณ๊ฒฝ์ ๋ํ ์๊ตฌ ์ฌํญ์ด ๋ง์ ๊ฒฝ์ฐ ๋น๋ ํจํด์ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๋ฅผ ๋์ฑ ํ์๋ก ํ ์ ์๋ ๊ฒ์ด์์. ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋น๋ ํจํด์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด์์. ์์ธ์ ์ธ ์ํฉ์ Entity ๊ฐ์ฒด ๋๋ ๋๋ฉ์ธ ๊ฐ์ฒด๋ก ๋ถํฐ DTO๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด ์ง์ ๋น๋๋ฅผ ๋ง๋ค๊ณ ํ๋ ์์ ์ด ๋ฒ๊ฑฐ๋กญ๊ธฐ ๋๋ฌธ์ Model Mapper์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ์์ฑ์ ์์ํ ์ ์๋ ๊ฒ์ด์์.
์ฃผ๋ํ๋์ ๊ธ์ด ๋ง์์ ๋์ จ๋์? ๊ตฌ๋ ๊ณผ ๊ณต๊ฐ! ๊ทธ๋ฆฌ๊ณ , ๋๊ธ ๊ทธ๋ฆฌ๊ณ ๋ฐฉ๋ช ๋ก์ ์ฃผ๋ํ๋์๊ฒ ๋ง์ ํ์ด ๋ฉ๋๋ค.
'Back-End ์์ ์ค > Spring Framework' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[WEB] Interceptor, Sevlet, Filter, Resource Handler ์์๋ณด๊ธฐ (0) | 2021.12.20 |
---|---|
[Spring] Spring MVC๋? (0) | 2021.12.20 |
[Spring] Bean Scope (0) | 2021.10.10 |
[Spring] Bean Life Cycle Call Back (0) | 2021.10.08 |
[Spring] ์์กด๊ด๊ณ ์ฃผ์ ๋ฐฉ๋ฒ (0) | 2021.10.07 |