- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스 레벨2
- 코딩테스트
- Design Pattern
- Algorithm
- 다트
- 알고리즘
- 디자인 패턴
- coding test
- sort
- 코테
- 프로그래머스
- 자료구조
- datastructure
- programmer
- swift
- swift 알고리즘
- swift split
- 정렬 알고리즘
- 프로그래머스 level1
- 감성에세이
- dart
- programmers
- 정렬
- rxswift
- 디자인패턴
- swift 코딩테스트
- 스위프트
- 프로그래머스 swift
- 정렬알고리즘
- 스위프트디자인패턴
Bill Kim's Life...
[디자인패턴] Bridge(브릿지) : 기능과 구현을 분리하여 독립적 변경과 확장을 용이하게 하는 패턴 본문
[디자인패턴] Bridge(브릿지) : 기능과 구현을 분리하여 독립적 변경과 확장을 용이하게 하는 패턴
billnjoyce 2020. 6. 12. 16:28디자인패턴에의 Bridge(브릿지)에 대하여 Swift를 기반으로 하여 살펴봅니다.
#. 구독 대상
- 컴퓨터 및 소프트웨어 공학과 관련자
- 소프트웨어 관련 종사자
- 기타 컴퓨터 공학에 관심이 있으신 분
- 디자인패턴의 개념을 잡고 싶으신 분
- 기타 소프트웨어 개발과 지식에 관심이 있으신 모든 분들
- Swift 언어를 활용하여 디자인패턴을 공부해보고 싶으신 분들
Bridge(브릿지)
Bridge(브릿지) 패턴은 구현부에서 추상층을 분리하여 각자 독립적으로 변형이 가능하고 확장이 가능하도록 하는 패턴입니다.
즉 기능과 구현에 대해서 두 개의 별도의 클래스로 구현을 할 수 있도록 하는 구조 설계 관련 패턴입니다.
Bridge 패턴은 객체의 다중 상속 구조를 피하면서 독립적으로 확장을 할 수 있도록 도와줍니다.
구조
Bridge(브릿지) 패턴을 UML로 도식화하면 아래와 같습니다.
Abstraction : 기능 계층의 최상위 클래스. 구현 부분에 해당하는 클래스를 인스턴스를 가지고 해당 인스턴스를 통해 구현부분의 메서드를 호출합니다.
RefindAbstraction : 기능 계층에서 새로운 부분을 확장한 클래스
Implementor : Abstraction의 기능을 구현하기 위한 인터페이스 정의
ConcreteImplementor : 실제 기능을 구현합니다.
Bridge 패턴을 사용하면 아래와 같은 다중 상속 구조를 확장이 용이하며 다중 상속을 피한 구조로 변경할 수 있습니다.
Implementation
// Implementor
protocol Car {
// implementation()
func drive()
}
// ConcreteImplementor
class Sedan : Car {
// implementation()
func drive() {
print("Drive a sedan")
}
}
// ConcreteImplementor
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
이상으로 Swift를 기반으로하여 Bridge(브릿지) 디자인 패턴을 설명하였습니다.
감사합니다.
www.slideshare.net/BillKim8/swift-bridge
github.com/billnjoyce/Lectures/tree/master/src/designpatterns
[참고 자료(References)]
[1] Bridge Pattern in Swift 4 : https://medium.com/@iamcrypticcoder/bridge-pattern-in-swift-4-3472b56504b6
[2] Swift World: Design Patterns — Bridge : https://medium.com/swiftworld/swift-world-design-patterns-bridge-a20bbe999059
[3] Swift Solutions: Bridge Design Pattern : https://swiftcraft.io/swift-bridge-design-pattern/
[4] Bridge in Swift : https://refactoring.guru/design-patterns/bridge/swift/example
[5] A Design Pattern Story in Swift – Chapter 15: Bridge : http://audreyli.me/2015/07/13/a-design-pattern-story-in-swift-chapter-15-bridge/
[6] Bridge - Design patterns in Swift 2 : https://www.youtube.com/watch?v=EOkWEv8rXHk
[7] 07 브릿지 패턴 (Bridge Pattern) : https://lktprogrammer.tistory.com/35
[8] [Design Pattern] 브릿지(Bridge) 패턴 - 디자인 패턴 : https://palpit.tistory.com/197
[9] [디자인패턴] bridge & adapter & mediator pattern : https://flyburi.com/188
[10] #5 Bridge Pattern in C++(브릿지 패턴 C++) : https://vallista.tistory.com/entry/5-Bridge-Pattern-in-C-브릿지-패턴-C
'CS(컴퓨터 과학) > Design Patterns' 카테고리의 다른 글
[디자인패턴] Flyweight : 객체 생성을 이미 있다면 공유 및 참조 (0) | 2020.06.12 |
---|---|
[디자인패턴] Command(커맨드) : 실행될 기능을 캡슐화하여 여러 기능을 실행 (0) | 2020.06.12 |
[디자인패턴] Facade(퍼사드) : 다수의 클래스간의 다양한 기능을 단순한 하나의 인터페이스 형태로 제공 (0) | 2020.06.12 |
[디자인패턴] Decorator(데코레이터) : 객체에 새로운 기능을 동적으로 추가 (0) | 2020.06.12 |
[디자인패턴] Composite(컴포지트) : 복합객체와 단일객체를 동일하게 취급, 전체-부분 객체 관계사이의 동일한 인터페이스 정의 (0) | 2020.06.12 |