[Spring Boot]@Builder ์ ๋ํ ์ด์ ์ ๋ํด ์์๋ณด์, ์์
@Builder ์ ๋ํ ์ด์
@Builder ์ ๋ํ ์ด์ ์ ๋กฌ๋ณต์์ ์ง์ํ๋ ์ ๋ํ ์ด์ ์.
ํ๋ง๋๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฉ์๋๋ฅผ ๋ง๋ค์ด์ค
โ
์์ฑ์ ์์ ๋ถ์ด๊ฒ ๋๋ฉด, ๋น๋ ํจํด ๋ฐฉ์์ผ๋ก ๊ฐ์ฒด ์์ฑ ํ ์ ์์ด์ ํธํจ.
โ
์๋ฅผ๋ค์ด
๋น๋ ํจํด ์์ฐ๊ณ ๋ง๋ค๋ฉด
new Article("title1", "abc");
์ด๋ ๊ฒ ๋จ.
โ
โ
๊ทผ๋ฐ ๋น๋ ํจํด ์ฐ๊ฒ๋๋ฉด
Article.builder()
.title("title1")
.content("abc")
.build();
์ด๋ ๊ฒ ๋จ!
โ
โ
๋น๋ ํจํด ์์ฐ๋ฉด abc๊ฐ ์ด๋ํ๋์ ๋ค์ด๊ฐ๋๊ฐ์ธ์ง ํ์ ํ๊ธฐ ์ข ์ด๋ ค์.
์ฌ๊ธฐ์ ๋ด๊ฐ ์ข ํท๊ฐ๋ ธ๋๊ฒ, @Builder์ ์ญํ ์ด ์์ฑ์์ฒ๋ผ ๋ณด์ด๋๋ฐ
@AllArgsConstructor๋ @NoArgsConstuctor์ฒ๋ผ ํด๋์ค ์์ ์๋ถ๊ณ
ํ๋๋ก ๋ฐ๋ก ๋บ๋์ง?
โ
์ผ๋จ @Builder๋ ์์ฑ์๋ฅผ ์ง์ ๋ง๋๋๊ฑด XXX
๋น๋ ํจํด์ ๋ง์ถฐ์ ๊ฐ์ฒด ๋ง๋๋ ๋ฉ์๋!!!๋ฅผ ๋ง๋ค์ด์ฃผ๋ ์ด๋ ธํ ์ด์ ์.
โ
@AllArgsConstructor๋ @NoArgsConstuctor๋ ์์ฑ์ ์์ฒด๋ฅผ ๋ง๋ค์ด์ฃผ๋์ ๊ณ
@Builder๋ ๋ฉ์๋ ๋ง๋๋ ์ ๋ผ์ ๋ค๋ฅด๋ค!!!!!!
โ
์์ฑ์๋ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ๋ ์ ๊ณ
๊ฐ์ฒด ์์ฑ ์์ฒด๋ new ์ฐ์ฐ์๊ฐ ํจ.
โ
โ
์๋ฅผ ๋ค์ด
User user = new User("email@test.com", "1234");
์ด ๊ฒฝ์ฐ์๋ new ์ฐ์ฐ์ ๋๋ฌธ์ Heap ๋ฉ๋ชจ๋ฆฌ์ ๊ณต๊ฐ์ ํ๋ณดํจ. (์ค์ ์์ฑ์ ์๋ฏธ)
โ
๊ทธ๋ฆฌ๊ณ User("email...)๋ก ์์ฑ์๊ฐ ํธ์ถ -> ํ๋ ์ด๊ธฐํํจ
โ
๊ทธ๋ฆฌ๊ณ user๋ณ์์ ์ฃผ์๊ฐ ๋ฐํํด์ ์ฐ๊ฒฐํ๋๊ฑฐ..
โ
โ
โ
+
new ๋ ์์ฑ์์จ์ ๊ฐ์ฒด ์์ฑํ๋๊ฑฐ๋
Builder ํจํด ์ฐ๋๊ฒ ํท๊ฐ๋ ค์ ์งํผํฐํํ ๋ฌผ์ด๋ด

User user = User.builder() // UserBuilder ๊ฐ์ฒด ์์ฑ
.email("email@test.com")
.password("1234")
.build(); // ์ฐ user ๊ฐ์ฒด ์์ฑ
์ด๋ฐ ์ฝ๋๊ฐ ์๋ฐ๊ณ ํ ๋,
โ
.build() ๋ฉ์๋ ์ฐ๊ฒ ๋๋ฉด ๋น๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋จ
โ
-> ๊ทผ๋ฐ ์ฌ๊ธฐ์ ๊ถ๊ธํ๊ฒ, ๋ ๋น๋ ๊ฐ์ฒด๊ฐ ์๋๋ผ User๊ฐ์ฒด ๋ง๋ค์ด์ผ ํ๋๋ฐ???
โ
--> ํด๋ต์,
โ
.builder()๊ฐ ๋ฆฌํดํ๋๊ฑด Builder ๊ฐ์ฒด์.
builder ๊ฐ์ฒด = User๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋๊ตฌ!! ์ ๋๋ผ๊ณ ์๊ฐํ๋ฉด ๋ ๋ฏ
โ
์ฐ User๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๋๊ฑด
.build() ๋ฉ์๋ ํธ์ถ๋ ๋์.