Search

๋นŒ๋” ํŒจํ„ด

๋นŒ๋” ํŒจํ„ด (Builder Pattern)

๋ณต์žกํ•œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •๊ณผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๊ตฌ์„ฑ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ์ƒ์„ฑ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๋™์ผํ•œ ์ƒ์„ฑ ์ ˆ์ฐจ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ํ‘œํ˜„ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ƒ์„ฑ ๊ณผ์ •์„ ์„ธ๋ถ€์ ์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๋ชฉ์ 

โ€ข
๋ณต์žกํ•œ ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๊ณผ์ •๊ณผ ํ‘œํ˜„ ๋ฐฉ๋ฒ•์„ ๋ถ„๋ฆฌ
โ€ข
๋™์ผํ•œ ์ƒ์„ฑ ์ ˆ์ฐจ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ํ‘œํ˜„ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ
โ€ข
์ƒ์„ฑ์ž ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋งŽ์„ ๋•Œ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ

ํŠน์ง•

โ€ข
๊ฐ์ฒด ์ƒ์„ฑ์— ํ•„์š”ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋งŽ์„ ๋•Œ ์œ ์šฉ
โ€ข
ํ•„์ˆ˜ ๊ฐ’๊ณผ ์„ ํƒ์  ๊ฐ’์„ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
โ€ข
๊ฐ์ฒด ์ƒ์„ฑ ๋‹จ๊ณ„๋ฅผ ๋” ์„ธ๋ถ„ํ™”ํ•˜์—ฌ ์ œ์–ด ๊ฐ€๋Šฅ
โ€ข
๋ถˆ๋ณ€์„ฑ(Immutability) ํ™•๋ณด ๊ฐ€๋Šฅ

์˜ˆ์‹œ ์ฝ”๋“œ

public class Computer { private String cpu; private String ram; private String storage; public static class Builder { private String cpu; private String ram; private String storage; public Builder cpu(String cpu) { this.cpu = cpu; return this; } public Builder ram(String ram) { this.ram = ram; return this; } public Builder storage(String storage) { this.storage = storage; return this; } public Computer build() { return new Computer(this); } } private Computer(Builder builder) { cpu = builder.cpu; ram = builder.ram; storage = builder.storage; } } // ์‚ฌ์šฉ ์˜ˆ์‹œ Computer computer = new Computer.Builder() .cpu("Intel i7") .ram("16GB") .storage("512GB SSD") .build();
Java
๋ณต์‚ฌ

์ฝ”๋“œ ํ•ด์„ค

์œ„ ์˜ˆ์‹œ ์ฝ”๋“œ๋Š” Computer ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋นŒ๋” ํŒจํ„ด์˜ ๊ตฌํ˜„์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
โ€ข
Computer ํด๋ž˜์Šค: ์ตœ์ข…์ ์œผ๋กœ ์ƒ์„ฑ๋  ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜๋ฉฐ, cpu, ram, storage ๋“ฑ์˜ ์†์„ฑ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
โ€ข
์ •์  ๋‚ด๋ถ€ ํด๋ž˜์Šค Builder: Computer ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๊ณผ์ •์„ ๋‹ด๋‹นํ•˜๋Š” ๋นŒ๋” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ๊ฐ ์†์„ฑ์„ ์„ค์ •ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
โ€ข
๋ฉ”์„œ๋“œ ์ฒด์ด๋‹: ๊ฐ ์„ค์ • ๋ฉ”์„œ๋“œ๋Š” Builder ๊ฐ์ฒด ์ž์‹ ์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ '.cpu().ram().storage()' ์™€ ๊ฐ™์€ ์—ฐ์‡„ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
โ€ข
build() ๋ฉ”์„œ๋“œ: ์ตœ์ข…์ ์œผ๋กœ ์„ค์ •๋œ ์†์„ฑ๊ฐ’๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ Computer ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ๊ตฌํ˜„์„ ํ†ตํ•ด ํ•„์š”ํ•œ ์†์„ฑ๋งŒ ์„ ํƒ์ ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

๋นŒ๋” ํŒจํ„ด์˜ ์žฅ์ 

โ€ข
๊ฐ์ฒด ์ƒ์„ฑ ๊ณผ์ •์ด ๋‹จ๊ณ„๋ณ„๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ์–ด ๋ณต์žกํ•œ ๊ฐ์ฒด๋„ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข
๊ฐ ์†์„ฑ์˜ ์„ค์ •์ด ๋ช…์‹œ์ ์ด๋ฏ€๋กœ ์–ด๋–ค ๊ฐ’์ด ์„ค์ •๋˜๋Š”์ง€ ์ง๊ด€์ ์œผ๋กœ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข
ํ•„์ˆ˜ ๊ฐ’๊ณผ ์„ ํƒ์  ๊ฐ’์„ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข
๋ถˆ๋ณ€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.