- 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 |
- swift 코딩테스트
- swift split
- 정렬알고리즘
- 디자인 패턴
- 디자인패턴
- swift
- sort
- 프로그래머스
- 자료구조
- 정렬 알고리즘
- programmer
- 스위프트
- 코딩테스트
- 감성에세이
- 알고리즘
- 다트
- swift 알고리즘
- 프로그래머스 swift
- datastructure
- coding test
- 스위프트디자인패턴
- 프로그래머스 레벨2
- dart
- 정렬
- Design Pattern
- programmers
- rxswift
- 프로그래머스 level1
- Algorithm
- 코테
Bill Kim's Life...
[디자인패턴] Adapter(어댑터) : 객체 호환 인터페이스 제공 본문
디자인패턴에의 Adapter(어댑터)에 대하여 Swift를 기반으로 하여 살펴봅니다.
#. 구독 대상
- 컴퓨터 및 소프트웨어 공학과 관련자
- 소프트웨어 관련 종사자
- 기타 컴퓨터 공학에 관심이 있으신 분
- 디자인패턴의 개념을 잡고 싶으신 분
- 기타 소프트웨어 개발과 지식에 관심이 있으신 모든 분들
- Swift 언어를 활용하여 디자인패턴을 공부해보고 싶으신 분들
Adapter(어댑터)
Adapter(어댑터) 디자인 패턴은 호환되지 않는 인터페이스를 가진 두 개의 객체가 함께 동작할 수 있도록 해주는 구조 설계 패턴입니다.
즉 특정 객체의 인터페이스를 변환하여 다른 객체에 적응시켜 사용할 수 있게 도와줍니다.
구조
Adapter 패턴을 UML로 도식화하면 아래와 같습니다.
Adaptee : 외부 라이브러리 및 외부 시스템 객체(기존 객체)
Target : Adapter가 구현하는 추상 인터페이스 객체, 클라이언트는 타겟(Target)의 인터페이스를 통해서 Adaptee의 인터페이스를 사용하게 된다.
Adapter : Adaptee(기존 객체)와 클라이언트 중간에서 연결시켜주는 역할을 한다. 타겟(Target) 인터페이스를 구현하며 클라이언트는 타겟 인터페이스를 통해 어댑터에 요청을 보낸다.
Client : 외부 라이브러리나 시스템을 사용하려는 객체
실생활 예시
아래의 그림은 우리 생활 속에서의 어댑터 패턴을 보여주는 예시 그림입니다.
Implementation
class Target {
func request() -> String {
return ""
}
}
class Adaptee {
public func specificRequest() -> String {
return "Adaptee's specificRequest."
}
}
class Adapter: Target {
private var adaptee: Adaptee
init(_ adaptee: Adaptee) {
self.adaptee = adaptee
}
override func request() -> String {
return self.adaptee.specificRequest() }
}
class Client {
static func specificRequest(target: Target) {
print("Call from adapter - \(target.request())")
}
}
let adaptee = Adaptee()
print(adaptee.specificRequest())
// Adaptee's specificRequest.
Client.specificRequest(target: Adapter(adaptee))
// Call from adapter - Adaptee's specificRequest.
이상으로 Swift를 기반으로하여 Adapter(어댑터)디자인 패턴을 설명하였습니다.
감사합니다.
www.slideshare.net/BillKim8/swift-adapter
github.com/billnjoyce/Lectures/tree/master/src/designpatterns
[참고 자료(References)]
[1] Swift Solutions: Adapter Pattern : https://swiftcraft.io/swift-solutions-adapter-pattern/
[2] Adapter pattern in Swift 4 : https://medium.com/@iamcrypticcoder/adapter-pattern-in-swift-4-d7ee2e71667c
[3] Adapter pattern in Swift : https://medium.com/jeremy-codes/adapter-pattern-in-swift-7332e178f112
[4] Top 5 스위프트 디자인 패턴 (번역) : https://leejigun.github.io/Top_5_Design_Patterns
[5] Adapter in Swift : https://refactoring.guru/design-patterns/adapter/swift/example
[6] Swift adapter design pattern : https://theswiftdev.com/swift-adapter-design-pattern/
[7] The Adapter Pattern in Swift : https://dev.to/mrcflorian/the-adapter-pattern-in-swift-449g
[8] The Adapter Pattern in Swift : https://dzone.com/articles/the-adapter-pattern-in-swift
[9] [Design Pattern] 어뎁터(Adapter) 패턴 - 디자인 패턴 : https://palpit.tistory.com/195
[10] Design Patterns in Swift #3: Facade and Adapter : https://www.appcoda.com/design-pattern-structural/
'CS(컴퓨터 과학) > Design Patterns' 카테고리의 다른 글
[디자인패턴] Composite(컴포지트) : 복합객체와 단일객체를 동일하게 취급, 전체-부분 객체 관계사이의 동일한 인터페이스 정의 (0) | 2020.06.12 |
---|---|
[디자인패턴] Builder(빌더) : 객체 생성 과정과 표현 분리, (0) | 2020.06.12 |
[디자인패턴] Prototype(프로토타입) : 클래스 정의와 생성 방식을 캡슐화, 객체 복제(Clone) (0) | 2020.06.12 |
[디자인패턴] Factory Method(팩토리 메소드) : 객체 생성을 위한 인터페이스 제공 (0) | 2020.06.12 |
[디자인패턴] Factory(팩토리) : 객체 생성 로직을 숨긴채 객체 생성 (0) | 2020.06.12 |