λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
IT

Builder Pattern: 객체 μƒμ„±μ˜ μœ μ—°ν•¨κ³Ό μž¬μ‚¬μš©μ„±μ„ 높이닀

by πŸ’²πŸŽ΅βœ–οΈβœ”οΈβ˜Ό 2024. 3. 2.
728x90

Builder Pattern: 객체 μƒμ„±μ˜ μœ μ—°ν•¨κ³Ό μž¬μ‚¬μš©μ„±μ„ 높이닀

μ†Œκ°œ

λΉŒλ” νŒ¨ν„΄(Builder Pattern)은 객체의 생성 과정을 μΆ”μƒν™”ν•˜μ—¬ λ³΅μž‘ν•œ 객체λ₯Ό μƒμ„±ν•˜λŠ” λ””μžμΈ νŒ¨ν„΄ 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. 이 νŒ¨ν„΄μ€ 객체의 ν‘œν˜„κ³Ό 생성 과정을 λΆ„λ¦¬ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ‘œ λ‹€λ₯Έ ν‘œν˜„μ˜ 객체λ₯Ό λ§Œλ“€ 수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€. λΉŒλ” νŒ¨ν„΄μ€ 주둜 λ§Žμ€ λ§€κ°œλ³€μˆ˜λ₯Ό κ°–λŠ” 객체의 μƒμ„±μ΄λ‚˜ λ³΅μž‘ν•œ 객체λ₯Ό 생성할 λ•Œ μœ μš©ν•˜κ²Œ μ“°μž…λ‹ˆλ‹€.

Builder Pattern의 ꡬ쑰

λΉŒλ” νŒ¨ν„΄μ€ 일반적으둜 λ‹€μŒκ³Ό 같은 ꡬ쑰둜 이루어져 μžˆμŠ΅λ‹ˆλ‹€.

  1. Product(생성될 객체): λΉŒλ”λ₯Ό 톡해 μƒμ„±λ˜λŠ” κ°μ²΄μž…λ‹ˆλ‹€.
  2. Builder(λΉŒλ” μΈν„°νŽ˜μ΄μŠ€): 객체 생성에 ν•„μš”ν•œ λ©”μ†Œλ“œλ“€μ„ μ„ μ–Έν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€μž…λ‹ˆλ‹€.
  3. ConcreteBuilder(λΉŒλ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„): Builder μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λ©° μ‹€μ œλ‘œ 객체λ₯Ό μƒμ„±ν•˜λŠ” ν΄λž˜μŠ€μž…λ‹ˆλ‹€.
  4. Director(객체 생성을 주도): λΉŒλ”λ₯Ό μ‚¬μš©ν•˜μ—¬ 객체λ₯Ό μƒμ„±ν•˜λŠ” ν΄λž˜μŠ€μž…λ‹ˆλ‹€.

λΉŒλ” νŒ¨ν„΄μ˜ μ—­ν• 

  1. μœ μ—°ν•œ 객체 생성: λ‹€μ–‘ν•œ 속성을 가진 객체λ₯Ό 생성할 λ•Œ, λΉŒλ” νŒ¨ν„΄μ€ 객체 생성을 μœ μ—°ν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•˜κ²Œ λ§Œλ“­λ‹ˆλ‹€.
  2. 객체 생성 κ³Όμ •μ˜ 좔상화: 객체 생성 과정을 ν΄λΌμ΄μ–ΈνŠΈλ‘œλΆ€ν„° λΆ„λ¦¬ν•˜μ—¬ λ³΅μž‘μ„±μ„ 쀄이고 μ½”λ“œ 가독성을 λ†’μž…λ‹ˆλ‹€.
  3. μž¬μ‚¬μš©μ„± 증가: λΉŒλ” νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λ©΄ λ™μΌν•œ λΉŒλ”λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€μ–‘ν•œ 객체λ₯Ό 생성할 수 μžˆμ–΄ μž¬μ‚¬μš©μ„±μ΄ μ¦κ°€ν•©λ‹ˆλ‹€.

Builder Pattern의 μž₯단점

μž₯점

  1. 객체 생성 κ³Όμ •μ˜ μœ μ—°μ„±: 객체 생성 과정을 ν΄λΌμ΄μ–ΈνŠΈλ‘œλΆ€ν„° λΆ„λ¦¬ν•¨μœΌλ‘œμ¨ λ‹€μ–‘ν•œ 속성을 가진 객체λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.
  2. 가독성 ν–₯상: λ³΅μž‘ν•œ 객체 생성 μ½”λ“œλ₯Ό κ°„κ²°ν•˜κ²Œ ν‘œν˜„ν•˜μ—¬ μ½”λ“œ 가독성을 λ†’μž…λ‹ˆλ‹€.
  3. 객체의 일관성: λΉŒλ”λ₯Ό 톡해 μΌκ΄€λœ λ°©μ‹μœΌλ‘œ 객체λ₯Ό 생성할 수 μžˆμ–΄ 일관성을 μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

단점

  1. ν΄λž˜μŠ€κ°€ λŠ˜μ–΄λ‚¨: λΉŒλ” νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λ©΄ 클래슀의 κ°œμˆ˜κ°€ λŠ˜μ–΄λ‚˜κΈ° λ•Œλ¬Έμ— μž‘μ€ 규λͺ¨μ˜ κ°μ²΄μ—λŠ” μ ν•©ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
  2. λΉŒλ” 클래슀의 λ³΅μž‘μ„±: λ³΅μž‘ν•œ 객체의 생성 κ³Όμ •μΌμˆ˜λ‘ λΉŒλ” ν΄λž˜μŠ€κ°€ λ³΅μž‘ν•΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

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);
    }
}

μ—°κ΄€λœ 기술

λΉŒλ” νŒ¨ν„΄μ€ 객체 생성과 κ΄€λ ¨λœ λ””μžμΈ νŒ¨ν„΄ 쀑 ν•˜λ‚˜λ‘œ,

νŒ©ν† λ¦¬ λ©”μ†Œλ“œ νŒ¨ν„΄, 좔상 νŒ©ν† λ¦¬ νŒ¨ν„΄κ³Ό ν•¨κ»˜ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. 특히, 생성 νŒ¨ν„΄μ— κ΄€λ ¨λœ λ””μžμΈ νŒ¨ν„΄μ„ ν•¨κ»˜ μ΄ν•΄ν•˜λ©΄ 객체 생성에 λŒ€ν•œ λ‹€μ–‘ν•œ μ ‘κ·Ό 방식을 μŠ΅λ“ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

마무리

λΉŒλ” νŒ¨ν„΄μ€ 객체 생성 κ³Όμ •μ˜ λ³΅μž‘μ„±μ„ κ΄€λ¦¬ν•˜κ³  ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μœ μ—°μ„±μ„ μ œκ³΅ν•˜μ—¬ 객체의 생성을 μ‰½κ²Œ λ§Œλ“­λ‹ˆλ‹€. 이λ₯Ό 톡해 가독성이 ν–₯μƒλ˜κ³  μž¬μ‚¬μš©μ„±μ΄ μ¦κ°€ν•˜λ©°, 객체 생성에 λŒ€ν•œ 일관성을 μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ μ ˆν•œ μƒν™©μ—μ„œ λΉŒλ” νŒ¨ν„΄μ„ ν™œμš©ν•˜μ—¬ 객체 μƒμ„±μ˜ νš¨μœ¨μ„±μ„ λ†’μ—¬λ³΄μ„Έμš”.

λŒ“κΈ€