๋น๋ ํจํด (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 ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋ฐํํฉ๋๋ค.
์ด๋ฌํ ๊ตฌํ์ ํตํด ํ์ํ ์์ฑ๋ง ์ ํ์ ์ผ๋ก ์ค์ ํ ์ ์์ผ๋ฉฐ, ์ฝ๋์ ๊ฐ๋
์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ํฅ์๋ฉ๋๋ค.
๋น๋ ํจํด์ ์ฅ์
โข
๊ฐ์ฒด ์์ฑ ๊ณผ์ ์ด ๋จ๊ณ๋ณ๋ก ๋๋์ด์ ธ ์์ด ๋ณต์กํ ๊ฐ์ฒด๋ ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
โข
๊ฐ ์์ฑ์ ์ค์ ์ด ๋ช
์์ ์ด๋ฏ๋ก ์ด๋ค ๊ฐ์ด ์ค์ ๋๋์ง ์ง๊ด์ ์ผ๋ก ์ ์ ์์ต๋๋ค.
โข
ํ์ ๊ฐ๊ณผ ์ ํ์ ๊ฐ์ ๊ตฌ๋ถํ์ฌ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
โข
๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.