inblog logo
|
heo-gom
    java

    Builder 패턴

    허성재's avatar
    허성재
    Aug 22, 2024
    Builder 패턴
     
    Builder 패턴은 객체 생성 패턴 중 하나로, 객체의 생성 과정에서 복잡한 설정이나 여러 단계의 초기화가 필요한 경우 유용하게 사용됩니다. 이 패턴은 객체를 구성하는 부분들을 단계별로 설정할 수 있게 하며, 최종적으로 완성된 객체를 생성합니다. Builder 패턴은 특히 불변 객체(immutable object)를 생성할 때 많이 사용됩니다.

    1. 주요 목적

    Builder 패턴의 주요 목적은 객체 생성의 복잡성을 줄이고, 객체를 더 유연하게 구성할 수 있게 하는 것입니다. 이를 통해 객체를 생성하는 과정에서 발생할 수 있는 다양한 문제를 피하고, 생성된 객체가 일관된 상태를 가지도록 보장할 수 있습니다.

    2. 구성 요소

    Builder 패턴은 일반적으로 다음과 같은 구성 요소로 이루어집니다.
    1. Product (제품): 최종적으로 생성될 복잡한 객체입니다. 예를 들어, 컴퓨터나 자동차와 같은 복잡한 객체가 될 수 있습니다.
    1. Builder (건설자): Product 객체를 생성하는 데 필요한 인터페이스(또는 추상 클래스)입니다. Builder는 Product 객체의 각 구성 요소를 설정하는 메서드를 정의합니다.
    1. ConcreteBuilder (구체적 건설자): Builder 인터페이스를 구현하는 클래스입니다. 이 클래스는 Product 객체의 인스턴스를 만들고, 각 구성 요소를 설정하는 메서드를 정의합니다. 최종적으로 getResult() 메서드를 통해 완성된 객체를 반환합니다.
    1. Director (감독자): Builder 객체를 이용해 Product 객체의 생성 과정을 지시하는 클래스입니다. Director는 Builder에게 각 단계의 작업을 지시하고, 최종적으로 완성된 객체를 반환받습니다. 이 단계에서 Director는 복잡한 생성 과정의 제어를 담당합니다.

    3. Builder 패턴의 구현 예제

    다음은 간단한 예제로, 컴퓨터(Computer) 객체를 Builder 패턴을 사용해 생성하는 경우를 보여줍니다.
    // 1. Product 클래스 public class Computer { private String CPU; private String GPU; private int RAM; private int storage; // 생성자와 Getter는 생략 private Computer(Builder builder) { this.CPU = builder.CPU; this.GPU = builder.GPU; this.RAM = builder.RAM; this.storage = builder.storage; } public static class Builder { private String CPU; private String GPU; private int RAM; private int storage; public Builder setCPU(String CPU) { this.CPU = CPU; return this; } public Builder setGPU(String GPU) { this.GPU = GPU; return this; } public Builder setRAM(int RAM) { this.RAM = RAM; return this; } public Builder setStorage(int storage) { this.storage = storage; return this; } public Computer build() { return new Computer(this); } } }

    4. 사용 예시

    public class Main { public static void main(String[] args) { Computer myComputer = new Computer.Builder() .setCPU("Intel i7") .setGPU("NVIDIA GTX 3080") .setRAM(16) .setStorage(512) .build(); // myComputer 객체 사용 } }

    5. 장점

    • 복잡한 객체의 생성 과정 제어: 복잡한 객체를 단계별로 생성할 수 있으며, 생성 과정에서의 실수를 줄일 수 있습니다.
    • 유연성: 객체 생성 과정에서 필요한 파라미터만 설정할 수 있고, 나머지는 기본값으로 처리할 수 있습니다.
    • 가독성 향상: 코드가 더 읽기 쉽고 유지보수하기 쉬워집니다.

    6. 단점

    • 복잡성 증가: 단순한 객체에 대해 Builder 패턴을 적용하면 불필요하게 복잡해질 수 있습니다.
    • 객체가 많이 필요 없는 경우 과도: 객체가 단순하거나 생성이 자주 일어나지 않는 경우에는 오히려 Builder 패턴이 불필요할 수 있습니다.
    Builder 패턴은 특히 객체 생성에 많은 파라미터가 필요하거나, 다양한 설정을 통해 객체를 유연하게 구성하고자 할 때 매우 유용합니다.
    Share article

    heo-gom

    RSS·Powered by Inblog