suvera-dev ๐Ÿฅฆ

Design Pattern) ๊ตฌ์กฐํŒจํ„ด #1 - Bridge Pattern ๋ณธ๋ฌธ

iOS/Design Pattern

Design Pattern) ๊ตฌ์กฐํŒจํ„ด #1 - Bridge Pattern

suvera 2022. 5. 12. 21:54

๊ตฌ์กฐํŒจํ„ด์ด๋ž€ ? 

ํด๋ž˜์Šค๋‚˜ ๊ฐ์ฒด๋ฅผ ์กฐํ•ฉํ•ด ๋” ํฐ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“œ๋Š” ํŒจํ„ด
์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋กœ ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง€๋‹Œ 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]

 

 

 

 

์ฐธ๊ณ  !

 

 

[๋””์ž์ธํŒจํ„ด] Bridge(๋ธŒ๋ฆฟ์ง€) : ๊ธฐ๋Šฅ๊ณผ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋…๋ฆฝ์  ๋ณ€๊ฒฝ๊ณผ ํ™•์žฅ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋Š” ํŒจํ„ด

๋””์ž์ธํŒจํ„ด์—์˜ Bridge(๋ธŒ๋ฆฟ์ง€)์— ๋Œ€ํ•˜์—ฌ Swift๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์—ฌ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. #. ๊ตฌ๋… ๋Œ€์ƒ ์ปดํ“จํ„ฐ ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™๊ณผ ๊ด€๋ จ์ž ์†Œํ”„ํŠธ์›จ์–ด ๊ด€๋ จ ์ข…์‚ฌ์ž ๊ธฐํƒ€ ์ปดํ“จํ„ฐ ๊ณตํ•™์— ๊ด€์‹ฌ์ด ์žˆ์œผ์‹  ๋ถ„ ๋””์ž

joycestudios.tistory.com

 

Comments