GoF์ ๋์์ธ ํจํด, ๋๋ฒ์งธ ๋น๋ ํจํด์ ๋ํด ์์๋ณธ๋ค.
ํด๋น ๊ธ์, ๋ค์์ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ดํดํ๋ ๊ฒ์ด ํธ๋ฆฌํฉ๋๋ค.
ํต์ฌ ์์ฝ
๋ณต์กํ ๊ตฌ์ฑ์ ๊ฐ์ฒด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์์ฑํ๋ ํจํด
- ๋๊ฐ์ง ๊ฒฝ์ฐ์ ์์ฃผ ์ฌ์ฉ๋จ
- ์์ฑ์ ์ง์ ํด์ผ ํ๋ ์ธ์๊ฐ ๋ง์ ๋
- ๊ฐ์ฒด ์์ฑ์ ์ฌ๋ฌ๋จ๊ณ๋ฅผ ์์ฐจ์ ์ผ๋ก ๊ฑฐ์น ๋
- ๋จ๊ณ์ ์์๋ฅผ ๊ฒฐ์ ํด๋๊ณ ๊ฐ ๋จ๊ณ๋ฅผ ๋ค์ํ๊ฒ ๊ตฌํํ ์ ์๋๋ก ํจ
- ์ด ๊ธ์์๋ ์ฒซ๋ฒ์งธ ๊ฒฝ์ฐ๋ฅผ ์ฃผ๋ก ์ค๋ช ํจ
- ์ผ๋จ ์์๋ฅผ ๋จผ์ ๋ณด๊ณ , ์ข ํฉํ ๋ด์ฉ์ ๋ค์๊ธ์์ ์ ๋ฆฌํ๋ ๊ฒ์ ๋ชฉํ๋ก ํจ
์์

- ์ฒซ๋ฒ์งธ ์์์ ๊ฒฝ์ฐ, ์์ฑ์ ์ง์ ํ๋ ์ธ์๊ฐ ๋ง์ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค ํ๋ค.
- ์ฆ, ํน์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค๋ ๋ง์ ์ธ์๊ฐ ํ์ํ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค.
- ๊ทธ๋ ๋ค๋ฉด Builder๋ฅผ ์ด๋ค๋ฉด ์ด๋ฌํ ์ ์์ ์ฐ์๋ฅผ ๊ฐ๋๋ค๋ ๊ฒ์ธ๋ฐ, ์ค์ ์ฝ๋๋ฅผ ๋ณด๋ฉฐ ํ์ธํด๋ณด์.
- Source Code
internal func Car์CarBuilderํธ์ถ๋ฐฉ์์ฐจ์ดํ์ธํ๊ธฐ() {
print("+++ Car์ CarBuilder ํธ์ถ๋ฐฉ์ ์ฐจ์ด ํ์ธํ๊ธฐ +++")
// initializer๋ฅผ ์ฌ์ฉํด์ ์ฒ๋ฆฌํ๊ธฐ
let car1 = Car(brandName: "Ford Mustang",
engine: "V8",
airbag: true,
color: "red",
isSelfDrivingAvailable: false,
isSexy: false)
print(car1.description)
// Builder๋ฅผ ์ฌ์ฉํด์ ์ฒ๋ฆฌํ๊ธฐ
let car2 = CarBuilder()
.brandName("Tesla")
.engine("Electric motor")
.airbag(true)
.color("black")
.isSelfDrivingAvailable(true)
.isSexy(false)
.build()
print(car2.description)
}- Car๋ 6๊ฐ์ ์ธ์๋ฅผ ๋ฐ๋๋ค.
- ์ด๋ฐ ๊ฒฝ์ฐ Builder๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด method chaining์ ํตํด ์ฒ๋ฆฌํ ์ ์๋ค.
internal func CarBuilder๊ฐ์ฌ์ฌ์ฉ์์ฉ์ดํ์ด์ ์์๋ณด๊ธฐ() {
print("+++ CarBuilder๊ฐ ์ฌ์ฌ์ฉ์ ์ฉ์ดํ ์ด์ ์์๋ณด๊ธฐ +++")
let teslaDefault = CarBuilder()
// .brandName("Tesla")
.engine("Electric motor")
.airbag(true)
.color("black")
.isSelfDrivingAvailable(true)
.isSexy(false)
let modelS = teslaDefault
.brandName("model S")
.build()
let model3 = teslaDefault
.brandName("model 3")
.build()
let modelX = teslaDefault
.brandName("model X")
.build()
let modelY = teslaDefault
.brandName("model Y")
.build()
print(modelS.description)
print(model3.description)
print(modelX.description)
print(modelY.description)
}
- ๊ทธ๋ผ method chaining์ ์ ์ข์๊น?
- ์์ ์์๋ ๋ค๋ฅธ ๊ฒ๋ค์ ๋๋ถ๋ถ ๊ฐ์ ์ํฉ์์ ์ฐจ brand ์ด๋ฆ๋ง ๋ค๋ฅธ ๊ฒฝ์ฐ๋ฅผ ๋ง๋๋ ์์์ด๋ค.
- ๊ธฐ๋ณธ ๊ฐ์ ๋ชจ๋ ๊ฐ๊ฒ ๋ง๋ค๋, ์ด ๊ฐ์ ๋ถ๋ถ์ด ๋ฐ์๋ builder๋ฅผ ๊ฐ์ ธ์ ๋ฐ๋ก๋ฐ๋ก ์์ฐํด๋ฒ๋ฆด ์ ์๋ค.
- ์์ฑ์๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๊ณ์ํด์ ์ค๋ณต๋ ์ฝ๋๊ฐ ๋ง๋ค์ด์ก์ ๊ฒ์ด๋ค.