250x250
반응형
05-10 06:13
Today
Total
«   2024/05   »
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
Notice
Recent Posts
Recent Comments
Link
Archives
관리 메뉴

Bill Kim's Life...

[디자인패턴] Adapter(어댑터) : 객체 호환 인터페이스 제공 본문

CS(컴퓨터 과학)/Design Patterns

[디자인패턴] Adapter(어댑터) : 객체 호환 인터페이스 제공

billnjoyce 2020. 6. 12. 15:57
728x90
반응형
디자인패턴에의 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

 

[Swift] Adapter

Swift 소스 코드를 통한 Adapter 디자인패턴에 관한 강의 자료입니다.

www.slideshare.net

github.com/billnjoyce/Lectures/tree/master/src/designpatterns

 

billnjoyce/Lectures

Contribute to billnjoyce/Lectures development by creating an account on GitHub.

github.com

 

 

 

 


[참고 자료(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/

728x90
반응형
Comments