본문 바로가기
ComputerScience/Design Pattern

Builder Pattern

by 규난 2023. 2. 1.
728x90

Bulider Pattern 이란?

복잡한 객체들을 단계별로 생성할 수 있도록 하는 디자인 패턴입니다.

 

Builder Pattern의 사용 목적

  • 복잡한 객체의 생성 방법과 표현 방법을 분리하기 위해 사용합니다.
  • 객체 생성에 필요한 파라미터가 많아 생성자 오버라이딩이 너무 많을 때 사용합니다.

Builder Pattern의 장점

  • 가독성이 좋아지며 인자의 의미를 코드에서 명확히 알 수 있습니다.
  • setter method가 없으므로 변경 불가능한 객체를 만들 수 있습니다.
  • 한 번에 객체를 반환하므로 일관성이 깨지지 않습니다.
  • 생성자로 객체를 생성할 때처럼 인자의 순서를 지키지 않고 객체를 생성할 수 있습니다.

Builder Pattern의 단점

  • 인스턴스를 생성하기 전에 반드시 빌더를 생성해야 합니다.
  • 관리해야 할 클래스가 많아지고 구조 및 구현이 복잡해지는 단점이 있습니다.

Builder Pattern 예제

package builder;

public class SimpleUser {
    private long id;
    private String name;
    private int age;
    private String address;
    private String phoneNumber;

    public SimpleUser(long id, String name, int age, String address, String phoneNumber) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.address = address;
        this.phoneNumber = phoneNumber;
    }

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getAddress() {
        return address;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public static SimpleUserBuilder builder() {
        return new SimpleUserBuilder();
    }

    public static class SimpleUserBuilder {
        private long id;
        private String name;
        private int age;
        private String address;
        private String phoneNumber;

        public SimpleUserBuilder() {
        }

        public SimpleUserBuilder id(long id) {
            this.id = id;
            return this;
        }

        public SimpleUserBuilder name(String name) {
            this.name = name;
            return this;
        }

        public SimpleUserBuilder age(int age) {
            this.age = age;
            return this;
        }

        public SimpleUserBuilder address(String address) {
            this.address = address;
            return this;
        }

        public SimpleUserBuilder phoneNumber(String phoneNumber) {
            this.phoneNumber = phoneNumber;
            return this;
        }

        public SimpleUser build() {
            return new SimpleUser(id, name, age, address, phoneNumber);
        }
    }
}
728x90

'ComputerScience > Design Pattern' 카테고리의 다른 글

Adaptor Pattern  (0) 2023.03.06
Facade Pattern  (0) 2023.02.26
Strategy Pattern  (0) 2023.02.20
디자인 패턴 - 디자인 원칙  (0) 2023.02.14
Singleton Pattern  (0) 2023.01.30