๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
[JAVA]/JPA

Entity ํด๋ž˜์Šค์—์„œ @Builder ์ œ๋Œ€๋กœ ์•Œ๊ณ  ์‚ฌ์šฉํ•˜์ž

by ํŒกํŽ‘ํ 2023. 5. 23.
728x90
๐Ÿ’ก ํšŒ์‚ฌ์—์„œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ORM์„ ํ™œ์šฉํ•˜์—ฌ API๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด์„œ ์ „์—๋Š” ์•„๋ฌด๋ ‡์ง€ ์•Š๊ฒŒ ๋ฐฐ์šด ๋Œ€๋กœ ๋”ฐ๋ผ ์น˜๋˜ ๊ฒƒ๋“ค์ด ํ•˜๋‚˜ํ•˜๋‚˜ ์™œ ์ด๋ ‡๊ฒŒ ๋˜๋Š”์ง€ ์˜์‹ฌ์ด ์ƒ๊ธฐ๊ณ  ๊ถ๊ธˆํ•ด์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ๊ทธ์ค‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋˜๋Š” Entity ํด๋ž˜์Šค์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์ด ๊ธ€์—์„œ ์ •๋ฆฌํ•œ Entity์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ๊ณผ๊ฑฐ์— ๋‚ด๊ฐ€ ์ ์€ ์ด ๊ธ€์—์„œ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™”๋‹ค.

 

 

Entity ํด๋ž˜์Šค

  • ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋˜๋Š” ํ•ต์‹ฌ ํด๋ž˜์Šค์ด๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜๋Š” ์นผ๋Ÿผ๋“ค์„ ํ•„๋“œ๋กœ ๊ฐ€์ง€๋Š” ๊ฐ์ฒด์ด๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”๊ณผ 1:1 ๋งคํ•‘์ด ๋˜๋ฏ€๋กœ ํ…Œ์ด๋ธ”์ด ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋Š” ์นผ๋Ÿผ์„ ํ•„๋“œ๋กœ ๊ฐ€์ ธ์„œ๋Š” ์•ˆ ๋œ๋‹ค.
  • Entity ํด๋ž˜์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์˜์†์„ฑ์„ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฒญ, ์‘๋‹ต ๋“ฑ์— ์‚ฌ์šฉ๋˜์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.
    • DB๋กœ๋ถ€ํ„ฐ ์กฐํšŒ๋œ Entity๋ฅผ ๊ทธ๋Œ€๋กœ View๋กœ ๋„˜๊ธฐ๊ฒŒ ๋œ๋‹ค๋ฉด ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ๋…ธ์ถœ๋˜๋Š” ๋“ฑ ์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ํ•ด์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • setter ๋ฉ”์„œ๋“œ์˜ ์‚ฌ์šฉ์„ ์ง€์–‘ํ•ด์•ผ ํ•œ๋‹ค. ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•ด์„œ๋„ setter ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด์˜ ๋ฌด๊ฒฐ์„ฑ, ์ผ๊ด€์„ฑ ๋“ฑ ๋ณ€์กฐ๋˜์ง€ ์•Š์Œ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•ด ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
    • Builder๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋”๋ผ๋„ ์–ด๋–ค ๊ฐ’์„ ์–ด๋–ค ํ•„๋“œ์— ๋„ฃ๋Š”์ง€ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์œก์•ˆ์œผ๋กœ ํ™•์ธ ๊ฐ€๋Šฅํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ˆœ์„œ๋„ ์ƒ๊ด€์ด ์—†๊ณ , ์ค‘๊ฐ„์— ๊ฐ’์„ ํ•˜๋‚˜๋งŒ ๋ฐ”๊พธ๋Š” ์ž‘์—…์ด ๋ถˆ๊ฐ€๋Šฅํ•ด setter์— ๋น„ํ•ด ์•ˆ์ „ํ•˜๋‹ค.

 

์œ„ ๋‚ด์šฉ์„ ๊ณ ๋ คํ•˜์—ฌ Entity ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

@Entity
public class Member {
    @Id
    @GeneratedValue
    private Long id;
    private String username;
}
  • ์•„์ฃผ ๊ฐ„๋‹จํ•œ Member Entity์ด๋‹ค.
  • @Entity๋ฅผ ๋ถ™์ด๋ฉด JPA์—๊ฒŒ Entity ๊ฐ์ฒด์ž„์„ ๋ช…์‹œํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ž, ์—ฌ๊ธฐ์„œ ํ•„์š”ํ•œ ์• ๋„ˆํ…Œ์ด์…˜์„ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•ด ๋ณด์ž.

 

 

@Entity
@Getter // ์ถ”๊ฐ€
public class Member {
    @Id
    @GeneratedValue
    private Long id;
    private String username;
}
  • @Getter ์• ๋„ˆํ…Œ์ด์…˜์„ ๋ถ™์˜€๋‹ค.
  • ์ด๋กœ์จ ์™ธ๋ถ€์—์„œ Member Entity์˜ id๋‚˜ username๊ณผ ๊ฐ™์€ ์†์„ฑ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.
  • @Getter๋ฅผ ์ด์šฉํ•˜์—ฌ ์„œ๋น„์Šค ๋‹จ์—์„œ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•  ๋•Œ๋‚˜, Dto ๊ฐ์ฒด์™€์˜ ๋งคํ•‘ ์ž‘์—…์„ ํ•  ๋•Œ Member ์—”ํ‹ฐํ‹ฐ๋ฅผ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.
  • @Setter ์—ญ์‹œ ๋น„์Šทํ•œ ์ด์œ ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, setter๋Š” ์กด์žฌ๋งŒ์œผ๋กœ Entity ๊ฐ์ฒด์˜ ๋ฌด๊ฒฐ์„ฑ๊ณผ ์ผ๊ด€์„ฑ ๋“ฑ ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. ์–ด๋””์„œ๋“  ํ•จ๋ถ€๋กœ ์“ฐ์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    • Entity ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”๊ณผ์˜ ๋งคํ•‘ ์ž‘์—… ์ด์™ธ์˜ ์ผ์— ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด Entity ๊ฐ์ฒด๊ฐ€ ๋งก๋Š” ์—ญํ• ์ด ๋งŽ์•„์ ธ ์˜์กด์„ฑ์ด ์˜ฌ๋ผ๊ฐ€๊ณ  ๊ฐ์ฒด ๊ฐ„ ๊ฒฐํ•ฉ๋„๊ฐ€ ์˜ฌ๋ผ๊ฐ€ ๊ฐ์ฒด์ง€ํ–ฅ ๊ด€์ ์—์„œ ์ข‹์ง€ ๋ชปํ•œ ์ฝ”๋“œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ Dto ๊ฐ์ฒด์™€ ๋งคํ•‘์„ ํ•˜์—ฌ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ธฐ ์œ„ํ•ด Setter ์—ญํ• ์„ ํ•˜๋Š” ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๊ธด ํ•˜๋‹ค.  ์–ด๋–ป๊ฒŒ Setter๋ฅผ ์“ฐ์ง€ ์•Š๊ณ  ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„๊นŒ? ์ƒ์„ฑ์ž ๋ฉ”์„œ๋“œ ๋“ฑ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” @Builder์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž!

 

@Builder ์‚ฌ์šฉํ•˜๊ธฐ

  • ์œ„์˜ ์ฝ”๋“œ์— @Builder๋ฅผ ์ถ”๊ฐ€ํ•ด ์ธํ…”๋ฆฌ์ œ์ด์— ์˜ฎ๊ฒผ๋”๋‹ˆ Member์— ๋นจ๊ฐ„ ์ค„์ด ๊ทธ์–ด์กŒ๋‹ค.
  • ์ธํ…”๋ฆฌ์ œ์ด์˜ ์„ค๋ช…์„ ์ฝ์–ด๋ณด์ž.

  • @Builder ์• ๋„ˆํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•˜๋‹ˆ ๊ธฐ๋ณธ์ƒ์„ฑ์ž๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.
  • ์ธํ…”๋ฆฌ์ œ์ด ๋ง๋Œ€๋กœ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด์ž.

 

 

  • ์—๋Ÿฌ๊ฐ€ ์‚ฌ๋ผ์กŒ๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ, ์—ฌ๊ธฐ์„œ ์งš๊ณ  ๋„˜์–ด๊ฐ€์•ผ ํ•  ๋ถ€๋ถ„์ด ์žˆ๋‹ค. @NoArgsConstuctor๋ฅผ ์ €๋Œ€๋กœ ๋‘๊ฒŒ ๋˜๋ฉด ์–ด๋””์„ ๊ฐ€ ์•„๋ฌด๋Ÿฐ ๊ฐ’๋„ ๊ฐ€์ง€์ง€ ์•Š๋Š” ์˜๋ฏธ ์—†๋Š” ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๊ฐ€๋Šฅ์„ฑ์„ ์—ด์–ด๋‘๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ NoArgsConstuctor์˜ ์ ‘๊ทผ ์ œ์–ด๋ฅผ PROTECTED๋กœ ์„ค์ •ํ•˜์—ฌ ์‚ฌ์ „์— ๋ฌด๋ถ„๋ณ„ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์˜ ๊ฐ€๋Šฅ์„ฑ์„ ์ฐจ๋‹จํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

 

  • ์ด์ œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•ด ๋ณด์ž.

 

 

  • ์–ด๋ผ..? builder ์• ๋„ˆํ…Œ์ด์…˜์ด ์ ์šฉ์ด ๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™๋‹ค.
  • ๊ธ‰ํ•œ ๋Œ€๋กœ @Setter๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด์•˜๋‹ค.

 

 

constructor Member in class jpabook.jpashop.Member cannot be applied to given types;

  • ์ด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋Š” Member ํด๋ž˜์Šค์— Long๊ณผ String์ด๋ผ๋Š” ๋‘ ๊ฐœ์˜ ์ธ์ˆ˜๋ฅผ ์˜ˆ์ƒํ•˜๋Š” ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์˜€์œผ๋‚˜ ์‹คํŒจํ–ˆ์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • @Builder์—์„œ ๋นŒ๋” ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ํ•„๋“œ๋ฅผ ์ธ์ž๋กœ ๊ฐ€์ง€๋Š” ์ƒ์„ฑ์ž๋ฅผ ์š”๊ตฌํ•œ๋‹ค.
  • ์œ„์— builder ์• ๋„ˆํ…Œ์ด์…˜์ด ์ ์šฉ ์•ˆ ๋˜๋Š” ๋ฐ๋Š” ๋‹ค ์ด์œ ๊ฐ€ ์žˆ์—ˆ๋‹ค.
  • ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์œ„์— ์–ธ๊ธ‰ํ•œ ๋Œ€๋กœ ๋ชจ๋“  ํ•„๋“œ๋ฅผ ์ธ์ž๋กœ ๊ฐ€์ง€๋Š” ์ƒ์„ฑ์ž๊ฐ€ ํ•„์š”ํ•œ๋ฐ ๋‹น์žฅ ๋– ์˜ค๋ฅด๋Š” ๊ฒƒ์€ @AllArgsConstructor์ด๋‹ค. ๋ฐ”๋กœ ์ ์šฉํ•ด ๋ณด์ž.

 

 

  • ๋ฌธ์ œ์—†์ด ๋Œ์•„๊ฐ€๊ธด ํ•˜๋Š”๋ฐ ์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์ด ์žˆ๋‹ค.
  • @AllArgsConstructor๋Š” ํด๋ž˜์Šค์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ํ•„๋“œ์— ๋Œ€ํ•œ ์ƒ์„ฑ์ž๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ์• ๋„ˆํ…Œ์ด์…˜์ด๋‹ค.

 

  • ์–ธ๋œป ๋ณด๊ธฐ์—๋Š” ํŽธํ•ด ๋ณด์ด์ง€๋งŒ @AllArgsConstructor์™€ @RequiredArgsConstructor๋Š” ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„์˜ ์„ ์–ธ ์ˆœ์„œ์— ์˜ํ–ฅ์„ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜์˜ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ๋ฉด ์ƒ์„ฑ์ž์˜ ์ž…๋ ฅ๊ฐ’ ์ˆœ์„œ๋„ ๋ฐ”๋€Œ์–ด ๋ฏธ๋ž˜์— ๋ฐœ๊ฒฌํ•˜๊ธฐ ์–ด๋ ค์šด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.(์ถ”๊ฐ€์ ์ธ ์ž‘์—…์— ๋”ฐ๋ผ ๋ณ€์ˆ˜์˜ ์„ ์–ธ ์ˆœ์„œ๋Š” ๋ฐ”๋€” ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.)
    • ์œ„์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ ์„ ์–ธ๋œ ๋ณ€์ˆ˜์˜ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€” ๋•Œ ์–ด๋– ํ•œ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋„ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.(์ด๊ฒƒ์ด ์˜ˆ์‹œ๊ฐ€ ์•„๋‹ˆ๋ผ ์‹ค์ œ ์ƒํ™ฉ์ด๋ผ ์ฃผ๋ฌธ๋Ÿ‰๊ณผ ์ทจ์†Œ๋Ÿ‰์ด ๋’ค๋ฐ”๋€Œ์—ˆ๋‹ค๋ฉด..?)
    • ๊ทธ๋‚˜๋งˆ ๊ฐ“ํ…”๋ฆฌ์ œ์ด๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’ ์˜†์— ํ•„๋“œ๋ช…์„ ํ‘œ์‹œํ•ด์ฃผ๊ณ  ์žˆ๋‹ค.
    • ํ•˜์ง€๋งŒ ์‹ค๋ฌด์ฒ˜๋Ÿผ ๋ณต์žกํ•œ ๋กœ์ง๊ณผ ์ˆ˜๋งŽ์€ ํด๋ž˜์Šค๊ฐ€ ์ž”๋œฉ ์žˆ๋Š” ์ƒํ™ฉ์—์„œ๋Š” ๋ˆˆ์น˜์ฑ„๊ธฐ๊ฐ€ ํž˜๋“ค์–ด ํ•œ ์ˆœ๊ฐ„์˜ ์‹ค์ˆ˜๋กœ ์น˜๋ช…์ ์ธ ๊ฒฐํ•จ์„ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค! 
  • ๋”ฐ๋ผ์„œ, ํด๋ž˜์Šค ๋ ˆ๋ฒจ์— @Builder์™€ @AllargsConstructor๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ƒ์„ฑ์ž๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค๊ณ  ์ƒ์„ฑ์ž์— @Builder๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • ๊ฒฐ๋ก ! @Builder๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด @AllargsConstructor๋ณด๋‹ค๋Š” ์ง์ ‘ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์ž.

 

 

  • ์œ„์˜ ๋ฌธ์ œ๋ฅผ ๋ชจ๋‘ ํ•ด๊ฒฐํ•œ @Builder๋ฅผ ํ™œ์šฉํ•œ Member Entity์ด๋‹ค.
  • ๋นŒ๋” ํŒจํ„ด์„ ํ™œ์šฉํ•˜์—ฌ Entity ๊ฐ์ฒด๋ผ๋Š” ๋ณธ์—ฐ์˜ ์—ญํ• ์— ์ง‘์ค‘ํ•˜๋ฉด์„œ ์„œ๋น„์Šค ๋‹จ์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•  ๋•Œ๋‚˜, DTO ๊ฐ์ฒด์™€ ๋งคํ•‘ํ•  ๋•Œ์—๋„ Entity ๊ฐ์ฒด์˜ ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

 

๋นŒ๋” ํŒจํ„ด ์‚ฌ์šฉ ์‹œ ๊ณ ๋ ค ์‚ฌํ•ญ

  • ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ์ˆ ์ด ๊ทธ๋ ‡๋“  ๋นŒ๋” ํŒจํ„ด ์—ญ์‹œ ๋งŒ๋Šฅ์€ ์•„๋‹ˆ๋‹ค. 
    • ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.
    • ์ƒ์„ฑ์ž๋ณด๋‹ค ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค. ๋งค๋ฒˆ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋นŒ๋”๋ฅผ ๊ฑฐ์ณ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.(๋น„์šฉ์€ ํฌ์ง€ ์•Š๋‹ค.)
    • ํด๋ž˜์Šค ํ•„๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ 4๊ฐœ ๋ฏธ๋งŒ์ด๊ฑฐ๋‚˜, ํ•„๋“œ์˜ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์ด ์—†๋‹ค๋ฉด ์ฐจ๋ผ๋ฆฌ ์ƒ์„ฑ์ž๋‚˜ ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

 

 

 

์ฐธ๊ณ 

https://siahn95.tistory.com/170#์ฃผ์˜์‚ฌํ•ญ%20๋ฐ%20๋‹จ์ -1

https://inpa.tistory.com/entry/GOF-๐Ÿ’ -๋นŒ๋”Builder-ํŒจํ„ด-๋ํŒ์™•-์ •๋ฆฌ#3._์ง€๋‚˜์นœ_๋นŒ๋”_๋‚จ์šฉ์€_๊ธˆ์ง€

https://velog.io/@mooh2jj/์˜ฌ๋ฐ”๋ฅธ-์—”ํ‹ฐํ‹ฐ-Builder-์‚ฌ์šฉ๋ฒ•

https://yuja-kong.tistory.com/99

728x90