-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
Builder 패턴은 복잡하게 생성되어야 할 객체를 구현할 때 구성을 분리하여 간단하게 동일한 역할을 하는 다른 코드로 만들 수 있게 하는 패턴입니다. 즉 어떤 객체를 생성자로 만들 때 한 번에 모두 만들 수도 있지만 객체가 가지는 요소가 많다면 여러 단계로 나누어 객체를 만들 수 있게 하는 패턴입니다.
- Director는 input을 받고 builder와 이를 조정합니다. iOS 개발에서는 ViewController나 ViewController에서 사용하는 helper 클래스가 이에 해당합니다.
- Builder는 단계별 입력을 받고 객체를 만듭니다. Builder는 클래스인 경우도 있어 참조하여 재사용 가능합니다.
- Product는 생산되는 복잡한 객체입니다. 구조체나 클래스 객체일 수 있습니다. 일반적으로 모델이지만 사용 사례에 따라 어떤 유형이든 될 수 있습니다.
사용
객체를 생성할 때 단계를 거쳐서 만들고 싶을 때 Builder 패턴을 사용할 수 있습니다. 특히 어떤 객체에 여러개의 입력이 필요할 때 잘 작동할 수 있는데요, director가 입력을 받고 builder가 입력을 사용하여 객체를 만드는 방법을 추상화하여 객체를 생성하게 됩니다.
예를 들어 Builder 패턴을 사용하여 햄버거를 만든다고 할 때 최종적으로 만들 객체는 햄버거 모델입니다. director는 햄버거를 만드는 방법을 알고 있는 사람이라고 볼 수 있죠. director는 빵, 고기, 토핑, 채소 등을 순서에 상관없이 받고 builder는 이러한 재료를 가지고 햄버거를 만들게 됩니다.
주의 사항
Builder 패턴은 일련의 단계를 사용하여 여러 입력을 요구하는 복잡한 제품을 만드는 데 가장 적합합니다. 제품에 여러 개의 입력이 없거나 단계적으로 만들 수 없는 경우 Builder 패턴은 실제보다 더 큰 문제가 될 수 있습니다. 굳이 간단한 객체를 Builder 패턴으로 만들면 복잡성만 증가하게 됩니다. 이럴 경우에는 이니셜라이저를 별도로 구성하여 product model을 만드는 편이 낫습니다.
정리
- 객체의 내부 표현을 변경할 수 있습니다. builder 객체는 director에게 객체 구성을 위한 추상 인터페이스(메서드)를 제공합니다. 인터페이스를 통해 builder는 자신이 어떻게 객체를 만들고 표현하는지에 대한 내부 구조를 숨길 수 있게 됩니다. product 객체는 추상 인터페이스를 통해 생성되기 때문에 만약 객체의 내부를 변경하고 싶다면 새로운 builder를 만들기만 하면 됩니다.
- 객체를 구성하는 코드를 분리할 수 있습니다. 예를 들어 엄청나게 많은 프로퍼티를 갖는 객체가 존재할 때 Builder는 이를 구성하고 표현하는 방식을 캡슐화하여 모듈성을 향상합니다. 이를 사용하는 곳에서는 객체의 내부 구조를 정의하는 클래스에 대해 알 필요가 없고 Builder 인터페이스에도 나타나지 않습니다.
- 객체가 만들어지는 과정을 세밀하게 제어 할 수 있습니다. 한 번에 모든 프로퍼티를 만드는 방법과 다르게 Builder 패턴은 단계별로 객체를 만들기 때문에 이를 세밀하게 제어할 수 있습니다.