Design Pattern
디자인 패턴 | 빌더 패턴 (builder patter)
iOSDEv
2024. 1. 30. 13:28
생성패턴(Creatioanl Pattern)
객체 인스턴스를 생성하는 패턴
클라이언트와 클라이언트가 생성해야하는 객체 인스턴스 사이의 연결을 끊어주는 패턴
객체가 생성되는 과정의 유연성을 높이고 코드의 유지를 쉽게 만들어주는 패턴
빌더 패턴
주로 복잡한 객체를 생성할 때 사용하는 생성 디자인 패턴
- 빌더 패턴은 보통 공장 시스템을 예시로 들 수 있다
- 첫 번째 예시 ) 공장에서도 한가지 제품에 내부에 여러가지 성능이나 다양한 부품을 가지고 만드는 과정이라고 볼 수 있다
- 두 번째 예시 ) 이어폰이란 객체를 만든다고 하면 기본적으로 듣는게 가능하면 된다지만 부수적으로 blutooth 기능 / noise 기능 / 선 없이 / 버튼의 갯수
- 복잡하게 많은 파라미터를 넣어 객체를 생성하지 않고 차례대로 값을 넣고 객체를 생성하는 구조
- 사용하게되면 복잡한 생성자를 줄일 수 있고 프로퍼티에 접근하여 사용하는 부분을 private로 적용해서 외부에 접근하지 못하게 캡슐화 할 수 있다
- 빌더 패턴으로 자신을 return하여 configure하는데 이 부분을 체이닝 하는것 처럼 사용하여 지금 SwiftUI와 매우 비슷하다는 것을 볼 수 있다
빌더 패턴 클래스 다이어그램

코드 및 설명

- earphones : 이어폰으로 정의
- earphonesBuilder : 이어폰으로 여러가지의 품질을 적용할 수 있도록 set 메서드를 만듦
- 속성 값을 세팅하는 함수는 자신을 반환 (chain을 사용하기 위함)
- 메서드 생성시 묶을 수 있는 부분을 같이 묶음
- UIButton에 테두리 만들 때 color / width 둘다 입력하게 되므로 하나로 묶음
- AirpodsPro : earphonesBuilder()메서드를 호출하면 붕어빵 찍어내듯이 새 객체를 생성할 수 있고 적절하게 사용하면 다양한 에어팟프로를 만들 수 있다
chat GPT 예시
class Person {
var name: String
var age: Int
var address: String?
// Private 생성자
private init(name: String, age: Int, address: String?) {
self.name = name
self.age = age
self.address = address
}
// 빌더 클래스
class Builder {
var name: String
var age: Int
var address: String?
init(name: String, age: Int) {
self.name = name
self.age = age
}
func setAddress(_ address: String?) -> Builder {
self.address = address
return self
}
// Person 객체 생성
func build() -> Person {
return Person(name: name, age: age, address: address)
}
}
}
// 빌더 패턴을 사용하여 Person 객체 생성
let person = Person.Builder(name: "John", age: 30)
.setAddress("123 Main St")
.build()
// 생성된 Person 객체 사용
print("Name: \(person.name), Age: \(person.age), Address: \(person.address ?? "N/A")")
이 코드에서 Person 클래스는 빌더 클래스 Builder를 포함하고 있습니다. Builder 클래스는 필수적인 속성들을 받는 초기화 메서드와, 선택적인 속성들을 설정할 수 있는 메서드들을 제공합니다. 마지막으로 build 메서드를 호출하여 실제 Person 객체를 생성합니다.
참조사이트
https://refactoring.guru/ko/design-patterns/creational-patterns
생성 디자인 패턴
refactoring.guru
https://yagom.net/courses/design-pattern-in-swift/lessons/%ea%b5%ac%ec%a1%b0-%ed%8c%a8%ed%84%b4/
Design Pattern in Swift - 야곰닷넷
Design Pattern in Swift 디자인 패턴 코스에 오신 것을 환영합니다! 이 코스는 야곰 아카데미 3기 수료생들과 […]
yagom.net
https://m.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS8616098823