์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ๊ณ ๋์ kit
- Swift
- ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ
- SOPT
- binarySearch
- duno
- 0์ด๋์ด์๋๊ธธ
- SQL
- ๋์ ๊ณํ๋ฒ
- GroupBy
- SwiftUI ํํ ๋ฆฌ์ผ
- ์ฐ์ํ์ค๋ถ๋ถ์์ด์ํฉ
- Til
- IOS
- BFS
- algoritm
- URLSession
- APPJAM
- ์ด์งํ์
- ๊ธฐ์ด๋ฌธ๋ฒ
- dfs
- discardableResult
- SwiftUI
- algorithm
- HAVIT
- DynamicProgramming
- GCD
- SwiftUI Tutorials
- concurrency
- ํ๋ก๊ทธ๋๋จธ์ค
- Today
- Total
suvera-dev ๐ฅฆ
Design Pattern) ๊ตฌ์กฐํจํด #1 - Bridge Pattern ๋ณธ๋ฌธ
๊ตฌ์กฐํจํด์ด๋ ?
ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ์กฐํฉํด ๋ ํฐ ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ํจํด
์๋ฅผ ๋ค์ด ์๋ก ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ฅผ ์ง๋ 2๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ฌถ์ด ๋จ์ผ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๊ฑฐ๋
๊ฐ์ฒด๋ค์ ์๋ก ๋ฌถ์ด ์๋ก์ด ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํจํด !
๊ตฌ์กฐํจํด ํน์ง !
- ์๋ก ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐํ ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง์น ํ๋์ธ ๊ฒ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค.
- ์ฌ๋ฌ ์ธํฐํ์ด์ค๋ฅผ ํฉ์ฑํ์ฌ ์๋ก ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ค์ ํต์ผ๋ ์ถ์์ ์ ๊ณตํ๋ค.
- ์ธํฐํ์ด์ค๋ ๊ตฌํ์ ๋ณตํฉํ๋ ๊ฒ์ด ์๋๋ผ ๊ฐ์ฒด๋ฅผ ํฉ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
๊ตฌ์กฐํจํด ์ข ๋ฅ
Bridge
Decorator
Facade
Flyweight
Proxy
Composite
Adaptor
์ค๋์ ์์ 7๊ฐ์ง ์ค์์ Bridge ํจํด์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค !
Bridge Pattern
๋ธ๋ฆฟ์ง ํจํด์ ๊ตฌํ๋ถ์์ ์ถ์์ธต์ ๋ถ๋ฆฌํ์ฌ ๊ฐ์ ๋ ๋ฆฝ์ ์ผ๋ก ๋ณํ์ด ๊ฐ๋ฅํ๊ณ
ํ์ฅ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ ํจํด !
์ฆ ๊ธฐ๋ฅ๊ณผ ๊ตฌํ์ ๋ํด์ ๋ ๊ฐ์ ๋ณ๋ ํด๋์ค๋ก ๊ตฌํ์ ํ ์ ์๋๋ก ํ๋
๊ตฌ์กฐ ์ค๊ณ ๊ด๋ จ ํจํด์ ๋๋ค
Bridge ํจํด์ ๊ฐ์ฒด์ ๋ค์ค ์์ ๊ตฌ์กฐ๋ฅผ ํผํ๋ฉด์ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ฅ์ ํ ์ ์๋๋ก ๋์์ค๋๋ค.
Abstraction : ๊ธฐ๋ฅ ๊ณ์ธต์ ์ต์์ ํด๋์ค.
๊ตฌํ ๋ถ๋ถ์ ํด๋นํ๋ ํด๋์ค๋ฅผ ์ธ์คํด์ค๋ฅผ ๊ฐ์ง๊ณ ํด๋น ์ธ์คํด์ค๋ฅผ ํตํด ๊ตฌํ๋ถ๋ถ์ ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
RefindAbstraction : ๊ธฐ๋ฅ ๊ณ์ธต์์ ์๋ก์ด ๋ถ๋ถ์ ํ์ฅํ ํด๋์ค
Implementor : Abstraction์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํ ์ธํฐํ์ด์ค ์ ์
ConcreteImplementor : ์ค์ ๊ธฐ๋ฅ์ ๊ตฌํํฉ๋๋ค.
Bridge ํจํด์ ์ฌ์ฉํ๋ฉด ์๋์ ๊ฐ์ ๋ค์ค ์์ ๊ตฌ์กฐ๋ฅผ ํ์ฅ์ด ์ฉ์ดํ๋ฉฐ
๋ค์ค ์์์ ํผํ ๊ตฌ์กฐ๋ก ๋ณ๊ฒฝํ ์ ์๋ค๊ณ ํฉ๋๋ค !
// Implementor : Abstraction ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํ ์ธํฐํ์ด์ค ์ ์
protocol Car {
// implementation()
func drive()
}
// ConcreteImplementor : ์ค์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ํด๋์ค 1
class Sedan : Car {
// implementation()
func drive() {
print("Drive a sedan")
}
}
// ConcreteImplementor : ์ค์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ํด๋์ค 2
class SUV : Car {
func drive() {
print("Drive a SUV")
}
}
// Abstraction : ๊ธฐ๋ฅ ๊ณ์ธต์ ์ต์์
protocol ColoredCar {
// implementor
var car: Car { get set }
// implementation()
func drive()
}
// RefinedAbstraction : ๊ธฐ๋ฅ๊ณ์ธต์์ ์๋ก์ด ๋ถ๋ถ ํ์ฅ
class RedCar: ColoredCar {
// implementor
var car: Car
init(car: Car) {
self.car = car
}
// refinedFunction()
func drive() {
print("It's a red color sedan.")
// self.impl.implementation()
car.drive()
}
}
let sedan = Sedan()
let redSedan = RedCar(car: sedan)
redSedan.drive()
// It's a red color sedan.
// Drive a sedan
๋ค์ค์์์ ํผํ๋ฉด์ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ฅํ๋ค๋๊ฒ ํต์ฌ๊ฐ๋ ์ธ ๊ฒ ๊ฐ์๋ฐ ์ ์ดํด๊ฐ ์๋๋๊ฑฐ ๊ฐ์์ ๋ ์ฐพ์๋ด์ผ์ง
๊ตฌํ์ธต ์ถ์์ธต ๋ถ๋ฆฌ !
+ ์ค๊ธ๋ก ์ค๋ช ๋ ์์
Shape๋ผ๋ ํด๋์ค๊ฐ ์๊ณ Shape์ ํ์ ํด๋์ค๋ก Circle, Square๊ฐ ์๋ ์๋ฅผ ๋ค์ด๋ณผ๊ฒ์. ํ์ฌ ํด๋์ค ๊ณ์ธต๊ตฌ์กฐ๋ฅผ ํ์ฅํ์ฌ Color๋ฅผ ๊ฐ๋ Shape ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค. ํ๋์ Circle, Square๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๊ณ ํ ๋ ๊ฐ๊ฐ BlueCircle, BlueSquare ํด๋์ค๋ฅผ ๋ง๋ค๊ฒ ๋๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ๋งค๋ฒ ์์ ํ๋์ฉ ์ถ๊ฐํ ๋๋ง๋ค ๋๋ฌด ๋ง์ ์๋ธ ํด๋์ค๊ฐ ์๊ฒจ๋๊ฒ ๋ฉ๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ Shape์ Color ํด๋์ค์ ๊ฐ๋ ์ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ฅํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ ์ผ์ธ๋ฐ์, ๋ธ๋ฆฌ์ง ํจํด์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๊ฐ์ฒด ๊ตฌ์ฑ์ผ๋ก ์ ํํ์ฌ ํด๊ฒฐํฉ๋๋ค. Color ํด๋์ค ๊ฐ์ฒด์ Shape ํด๋์ค ๊ฐ์ฒด๋ฅผ ๋๋์ด ์๊ฐํ๋ ๊ฑฐ์์. ๋ง์ฝ Color ํด๋์ค ๊ฐ์ฒด๋ก Blue, Red๋ฅผ ๋ง๋ค์๋ค๋ฉด Shape ํด๋์ค์ ๊ฐ์ฒด๊ฐ ์ด๋ฅผ ์ฐธ์กฐํ์ฌ ์ฌ์ฉํ๊ฒ ํ ์ ์์ผ๋ฉฐ ์ด๋ฌํ ์ฐธ์กฐ๊ฐ Bridge ์ญํ ์ ํ๊ฒ ๋ฉ๋๋ค.
๋ธ๋ฆฌ์ง ํจํด์ ๊ฒฐ๊ณผ
์ข ์์ฑ์ด ์๋ ์ธํฐํ์ด์ค์ ๊ตฌํ๋ถ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
์ถ์ํ์ ๊ตฌํ์ ๋ฐํ์์์ ๊ตฌ์ฑํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด๊ฐ ๋ฐํ์์์ ๊ตฌํ๋ถ๋ฅผ ๋ณ๊ฒฝํ ์๋ ์์ต๋๋ค.
์ด๋ ๊ฒ ์ถ์ํ์ ๊ตฌํ์ ๋ถ๋ฆฌํ๋ฉด ๊ตฌํ์ ๋ํ ์ปดํ์ผ ์๊ฐ ์ข ์์ฑ๋ ์ ๊ฑฐ๋๋ฉฐ
๊ตฌํ ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด Abstraction ํด๋์ค์ ํด๋น ํด๋ผ์ด์ธํธ๋ฅผ ๋ค์ ์ปดํ์ผํ ํ์๊ฐ ์์ด์ง๋๋ค.
์ฝ๋์ ํ์ฅ์ฑ์ด ์ข์์ง๋๋ค.
ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๊ตฌํ์ ์ธ๋ถ ์ฌํญ์ ์จ๊ธธ ์ ์์ต๋๋ค. ๊ตฌํ ํด๋์ค์ ๊ฐ์ฒด ๊ณต์ ๋ฐ ์ฐธ์กฐ ์นด์ดํธ ๋ฉ์ปค๋์ฆ๊ณผ ๊ฐ์ ์ธ๋ถ ์ ๋ณด๋ก๋ถํฐ ํด๋ผ์ด์ธํธ๋ฅผ ๋ณดํธํ ์ ์์ต๋๋ค.
์ถ์ฒ: https://icksw.tistory.com/242?category=944177 [PinguiOS]
์ฐธ๊ณ !
'iOS > Design Pattern' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Design Pattern ) ๋์์ธํจํด ๊ฐ์ 2ํธ (0) | 2022.05.05 |
---|---|
Design Pattern) ์์ฑํจํด #1 - ํฉํ ๋ฆฌ ํจํด (0) | 2022.05.05 |
Design Pattern ) ๋์์ธ ํจํด ๊ฐ์ (4) | 2022.04.13 |