Builder Pattern: κ°μ²΄ μμ±μ μ μ°ν¨κ³Ό μ¬μ¬μ©μ±μ λμ΄λ€
μκ°
λΉλ ν¨ν΄(Builder Pattern)μ κ°μ²΄μ μμ± κ³Όμ μ μΆμννμ¬ λ³΅μ‘ν κ°μ²΄λ₯Ό μμ±νλ λμμΈ ν¨ν΄ μ€ νλμ λλ€. μ΄ ν¨ν΄μ κ°μ²΄μ ννκ³Ό μμ± κ³Όμ μ λΆλ¦¬νμ¬ ν΄λΌμ΄μΈνΈκ° μλ‘ λ€λ₯Έ ννμ κ°μ²΄λ₯Ό λ§λ€ μ μλλ‘ ν©λλ€. λΉλ ν¨ν΄μ μ£Όλ‘ λ§μ 맀κ°λ³μλ₯Ό κ°λ κ°μ²΄μ μμ±μ΄λ 볡μ‘ν κ°μ²΄λ₯Ό μμ±ν λ μ μ©νκ² μ°μ λλ€.
Builder Patternμ ꡬ쑰
λΉλ ν¨ν΄μ μΌλ°μ μΌλ‘ λ€μκ³Ό κ°μ κ΅¬μ‘°λ‘ μ΄λ£¨μ΄μ Έ μμ΅λλ€.
- Product(μμ±λ κ°μ²΄): λΉλλ₯Ό ν΅ν΄ μμ±λλ κ°μ²΄μ λλ€.
- Builder(λΉλ μΈν°νμ΄μ€): κ°μ²΄ μμ±μ νμν λ©μλλ€μ μ μΈνλ μΈν°νμ΄μ€μ λλ€.
- ConcreteBuilder(λΉλ μΈν°νμ΄μ€λ₯Ό ꡬν): Builder μΈν°νμ΄μ€λ₯Ό ꡬννλ©° μ€μ λ‘ κ°μ²΄λ₯Ό μμ±νλ ν΄λμ€μ λλ€.
- Director(κ°μ²΄ μμ±μ μ£Όλ): λΉλλ₯Ό μ¬μ©νμ¬ κ°μ²΄λ₯Ό μμ±νλ ν΄λμ€μ λλ€.
λΉλ ν¨ν΄μ μν
- μ μ°ν κ°μ²΄ μμ±: λ€μν μμ±μ κ°μ§ κ°μ²΄λ₯Ό μμ±ν λ, λΉλ ν¨ν΄μ κ°μ²΄ μμ±μ μ μ°νκ³ νμ₯ κ°λ₯νκ² λ§λλλ€.
- κ°μ²΄ μμ± κ³Όμ μ μΆμν: κ°μ²΄ μμ± κ³Όμ μ ν΄λΌμ΄μΈνΈλ‘λΆν° λΆλ¦¬νμ¬ λ³΅μ‘μ±μ μ€μ΄κ³ μ½λ κ°λ μ±μ λμ λλ€.
- μ¬μ¬μ©μ± μ¦κ°: λΉλ ν¨ν΄μ μ¬μ©νλ©΄ λμΌν λΉλλ₯Ό μ¬μ©νμ¬ λ€μν κ°μ²΄λ₯Ό μμ±ν μ μμ΄ μ¬μ¬μ©μ±μ΄ μ¦κ°ν©λλ€.
Builder Patternμ μ₯λ¨μ
μ₯μ
- κ°μ²΄ μμ± κ³Όμ μ μ μ°μ±: κ°μ²΄ μμ± κ³Όμ μ ν΄λΌμ΄μΈνΈλ‘λΆν° λΆλ¦¬ν¨μΌλ‘μ¨ λ€μν μμ±μ κ°μ§ κ°μ²΄λ₯Ό μμ±ν μ μμ΅λλ€.
- κ°λ μ± ν₯μ: 볡μ‘ν κ°μ²΄ μμ± μ½λλ₯Ό κ°κ²°νκ² νννμ¬ μ½λ κ°λ μ±μ λμ λλ€.
- κ°μ²΄μ μΌκ΄μ±: λΉλλ₯Ό ν΅ν΄ μΌκ΄λ λ°©μμΌλ‘ κ°μ²΄λ₯Ό μμ±ν μ μμ΄ μΌκ΄μ±μ μ μ§ν μ μμ΅λλ€.
λ¨μ
- ν΄λμ€κ° λμ΄λ¨: λΉλ ν¨ν΄μ μ¬μ©νλ©΄ ν΄λμ€μ κ°μκ° λμ΄λκΈ° λλ¬Έμ μμ κ·λͺ¨μ κ°μ²΄μλ μ ν©νμ§ μμ μ μμ΅λλ€.
- λΉλ ν΄λμ€μ 볡μ‘μ±: 볡μ‘ν κ°μ²΄μ μμ± κ³Όμ μΌμλ‘ λΉλ ν΄λμ€κ° 볡μ‘ν΄μ§ μ μμ΅λλ€.
Builder Pattern μμ μ½λ
λ€μμ Javaμμμ Builder Pattern μμ μ½λμ λλ€.
// Product
public class Computer {
private String CPU;
private String RAM;
private String storage;
public Computer(String CPU, String RAM, String storage) {
this.CPU = CPU;
this.RAM = RAM;
this.storage = storage;
}
// κ° νλμ getter λ©μλλ€
}
// Builder Interface
public interface ComputerBuilder {
ComputerBuilder setCPU(String CPU);
ComputerBuilder setRAM(String RAM);
ComputerBuilder setStorage(String storage);
Computer build();
}
// ConcreteBuilder
public class DesktopBuilder implements ComputerBuilder {
private String CPU;
private String RAM;
private String storage;
@Override
public ComputerBuilder setCPU(String CPU) {
this.CPU = CPU;
return this;
}
@Override
public ComputerBuilder setRAM(String RAM) {
this.RAM = RAM;
return this;
}
@Override
public ComputerBuilder setStorage(String storage) {
this.storage = storage;
return this;
}
@Override
public Computer build() {
return new Computer(CPU, RAM, storage);
}
}
// Director
public class Director {
private ComputerBuilder builder;
public Director(ComputerBuilder builder) {
this.builder = builder;
}
public Computer construct() {
return builder.setCPU("Intel i7")
.setRAM("16GB")
.setStorage("512GB SSD")
.build();
}
}
// Client
public class Client {
public static void main(String[] args) {
ComputerBuilder desktopBuilder = new DesktopBuilder();
Director director = new Director(desktopBuilder);
Computer desktop = director.construct();
System.out.println("Desktop Computer: " + desktop);
}
}
μ°κ΄λ κΈ°μ
λΉλ ν¨ν΄μ κ°μ²΄ μμ±κ³Ό κ΄λ ¨λ λμμΈ ν¨ν΄ μ€ νλλ‘,
ν©ν 리 λ©μλ ν¨ν΄, μΆμ ν©ν 리 ν¨ν΄κ³Ό ν¨κ» μ¬μ©λ μ μμ΅λλ€. νΉν, μμ± ν¨ν΄μ κ΄λ ¨λ λμμΈ ν¨ν΄μ ν¨κ» μ΄ν΄νλ©΄ κ°μ²΄ μμ±μ λν λ€μν μ κ·Ό λ°©μμ μ΅λν μ μμ΅λλ€.
λ§λ¬΄λ¦¬
λΉλ ν¨ν΄μ κ°μ²΄ μμ± κ³Όμ μ 볡μ‘μ±μ κ΄λ¦¬νκ³ ν΄λΌμ΄μΈνΈμκ² μ μ°μ±μ μ 곡νμ¬ κ°μ²΄μ μμ±μ μ½κ² λ§λλλ€. μ΄λ₯Ό ν΅ν΄ κ°λ μ±μ΄ ν₯μλκ³ μ¬μ¬μ©μ±μ΄ μ¦κ°νλ©°, κ°μ²΄ μμ±μ λν μΌκ΄μ±μ μ μ§ν μ μμ΅λλ€. μ μ ν μν©μμ λΉλ ν¨ν΄μ νμ©νμ¬ κ°μ²΄ μμ±μ ν¨μ¨μ±μ λμ¬λ³΄μΈμ.
'IT' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Redis: λ°μ΄ν°λ² μ΄μ€μ μΊμ±μ νμ (0) | 2024.03.05 |
---|---|
Pub-Sub Pattern: μ΄λ²€νΈ κΈ°λ° ν΅μ μ ν΅μ¬ (0) | 2024.03.02 |
JVM(Java Virtual Machine)μ μ΄ν΄μ νμ© (0) | 2024.03.01 |
BFF(Backend For Frontend) κ°λ λ° νμ© (0) | 2024.03.01 |
μλ°μ€ν¬λ¦½νΈ Prototype: κ°λ , νμ©, μ₯λ¨μ , μμ μ½λ (0) | 2024.02.28 |
λκΈ