⚡빌더 패턴이란?
빌더 패턴(Builder pattern)은 생성 패턴 중 하나로 객체 생성과정을 분리하고 복잡한 객체를 조립하기 위한 디자인 패턴 중 하나이다. 객체의 생성 과정을 객체 자체와 분리하여 객체 생성의 유연성과 확장성을 높이고 객체 생성 코드의 가독성과 유지보수성을 개선한다.
빌더 패턴은 생성해야 되는 객체가 Optional한 속성을 많이 가질 때 빛을 발휘한다.
빌더 패턴은 다음과 같은 구성요소를 갖는다.
Builder: 객체를 생성하기 위한 인터페이스를 제공한다. 이때, 관례적으로 생성하고자 하는 클래스 이름 뒤에 Builder를 붙인다.
ConcreteBuilder: Builder 인터페이스를 구현하여 객체를 생성하는 구체적인 빌더 클래스이다. ConcreteBuilder 클래스는 Builder 인터페이스를 구현하여, 객체 생성 과정에서 필요한 각각의 속성들을 설정한다.
Director: ConcreteBuilder를 이용하여 객체를 생성하는 클래스이다. Director 클래스는 객체 생성 과정을 조율하고, 최종적으로 객체를 반환한다.
Product: 최종적으로 생성된 객체이다.
⚡빌더 패턴은 어떤 경우에 사용하는가 ?
빌더 패턴을 이용하면 객체의 생성과정을 단계별로 수행하며 다양한 객체 생성 방법을 지원할 수 있다. 예를 들어 객체의 속성 중 일부는 필수적이고 일부는 선택적일 수 있다. 빌더 패턴을 이용하면 필수 속성들은 반드시 설정되도록 보장하면서 선택적인 속성들은 필요에 따라 설정할 수 있도록 할 수 있다.
빌더 패턴은 복잡한 객체의 생성과정을 단순화하고 객체 생성과정을 유연하게 제어할 수 있다. 하지만 빌더 패턴이 모든 상황에 적합한 것은 아니며 객체 생성과정이 단순한 경우에는 불필요한 코드 및 클래스를 추가하는 것이므로 상황에 따라 적절히 선택하여 사용해야 한다.
- 객체 생성 과정이 복잡한 경우: 객체의 생성 과정이 복잡하거나 객체가 다른 객체들과의 복잡한 상호작용을 필요로 하는 경우 빌더 패턴을 사용할 수 있다. 예를 들어, 복잡한 계층 구조를 가진 GUI 객체나 대규모 데이터베이스의 테이블 등을 예로 들 수 있다.
- 객체 생성 방법이 다양한 경우: 객체의 생성 방법이 다양한 경우 빌더 패턴을 사용할 수 있다. 예를 들어, 파일을 생성하는 클래스가 있을 때, 이 클래스는 파일 생성 방법이 다양할 수 있다. 이때 빌더 패턴을 사용하면 다양한 방법으로 파일을 생성할 수 있다.
- 객체 생성 코드의 가독성과 유지보수성을 개선하고 싶은 경우: 객체 생성 코드가 복잡하고 가독성이 나쁜 경우 빌더 패턴을 사용하여 객체 생성 코드를 단순화하고 가독성을 개선할 수 있다. 또한 객체 생성 코드가 변경될 가능성이 높은 경우 빌더 패턴을 사용하여 유지보수성을 개선할 수 있습니다.
⚡빌더 패턴의 장단점
장점
- 객체 생성 과정을 분리하여 유연성과 확장성을 높일 수 있다.
- 객체 생성 과정을 추상화하여 객체 생성 코드의 가독성과 유지보수성을 개선할 수 있다.
- 객체 생성 방법이 다양한 경우, 다양한 방법으로 객체를 생성할 수 있다.
- 객체 생성 과정을 캡슐화하여, 객체를 생성하는 코드와 사용하는 코드를 분리할 수 있다.
단점
- 빌더 클래스의 추가적인 생성 비용이 발생한다.
- 객체 생성 과정이 단순한 경우, 빌더 패턴을 사용하는 것이 객체 생성 코드를 더 복잡하게 만들 수 있다.
- 객체 생성 방법이 많지 않은 경우, 빌더 패턴을 사용하는 것이 객체 생성 코드의 가독성을 저해할 수 있다.
⚡빌더 소스 정리
⚡생각
빌더 패턴의 경우 내부 소스를 작성할 때 자주 사용하는 패턴 중 하나이며, 처음에는 내가 작성한 코드가 빌더 패턴인지도 모르고 사용을 하고 있었던 때가 있었다..ㅎㅎ(😅😅)
빌더 패턴에 대해서 모르고 사용하고 있었다면 예제 소스들을 보게 된다면 자신도 모르게 사용하고 있는 빌더 패턴을 볼 수 있다고 생각한다. 빌더 패턴을 사용하는 경우에서 설명한 것처럼 빌더 패턴은 복잡한 객체의 생성과정을 단순화하고 객체 생성과정을 유연하게 하는 것이다. 잘못 사용하는 경우에는 간단한 소스코드를 더욱 복잡하게 할 수 있다는 것을 생각하고 사용하자!
'디자인 패턴' 카테고리의 다른 글
[디자인 패턴] 어댑터 패턴에 대한 내용 정리 (0) | 2023.03.24 |
---|---|
[디자인 패턴] 프로토 타입 패턴에 대한 내용 정리 (0) | 2023.03.21 |
[디자인 패턴] 추상 팩토리 패턴에 대한 내용 정리 (0) | 2023.03.16 |
[디자인 패턴] 팩토리 메소드 패턴에 대한 내용 정리 (0) | 2023.03.14 |
[디자인 패턴] 싱글턴 패턴에 대한 내용 정리 (0) | 2023.03.13 |