250x250
반응형
05-12 01:08
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...

[디자인패턴] Proxy(프록시) : 가상의 객체를 만들어서 흐름 제어 본문

CS(컴퓨터 과학)/Design Patterns

[디자인패턴] Proxy(프록시) : 가상의 객체를 만들어서 흐름 제어

billnjoyce 2020. 6. 12. 17:48
728x90
반응형
디자인패턴에의 Proxy(프록시)에 대하여 Swift를 기반으로 하여 살펴봅니다.

 

 

#. 구독 대상

  • 컴퓨터 및 소프트웨어 공학과 관련자
  • 소프트웨어 관련 종사자
  • 기타 컴퓨터 공학에 관심이 있으신 분
  • 디자인패턴의 개념을 잡고 싶으신 분
  • 기타 소프트웨어 개발과 지식에 관심이 있으신 모든 분들
  • Swift 언어를 활용하여 디자인패턴을 공부해보고 싶으신 분들

 

 


 

Proxy(프록시)

 

Proxy(프록시) 패턴은 실제 기능을 수행하는 객체(Real Object)(대신 가상의 객체(Proxy Object)를 사용해 로직의 흐름을 제어하는 디자인 패턴입니다.

 

Proxy 객체를 이용하여 원래 객체의 변경없이 기능을 특정 방식을 제어할 수 있게 도와줍니다.

 

 

 

 

 


 

 

 

구조

 

Proxy(프록시) 패턴을 UML로 도식화하면 아래와 같습니다. 

 

 

Subject : Client가 직접 접근하여 기능을 수행하는 추상 부모 클래스, 해당 클래스를 RealSubject가 상속을 받아서 실제 기능에 대한 구현을 수행한다.

RealSubject : 실제 기능을 수행하는 객체

Proxy : RealSubject 객체 대신에 기능을 위임받아 수행하는 역할을 하는 객체, 해당 Proxy 객체가 실제 객체의 기능 및 추가적인 기능을 수행한다.

 

 

Proxy 패턴을 실생활에서의 예시로 보면 아래와 같은 현상을 볼 수 있습니다.

 

 

 

 

 

 

 

 


 

 

 

 

Implementation

 

protocol Subject {
    func request()
}

class RealSubject : Subject {
    func request() {
        print("RealSubject request.")
    }
}

class Proxy : Subject {
    private var realSubject: RealSubject

    init(_ realSubject: RealSubject) {
        self.realSubject = realSubject
    }

    func request() {
        print("Proxy request.")
        
        otherFunction()
    }

    private func otherFunction() { }
}
func clientProxy(subject: Subject) {
    subject.request()
}

let realSubject = RealSubject()
clientProxy(subject: realSubject)
// RealSubject request.

let proxy = Proxy(realSubject)
clientProxy(subject: proxy)
// Proxy request.
// RealSubject request.

 

 

 

 


 

 

 

이상으로 Swift를 기반으로하여 Proxy(프록시) 디자인 패턴을 설명하였습니다.

 

 

 

 

감사합니다.

 

 

 

 

 

www.slideshare.net/BillKim8/swift-proxy

 

[Swift] Proxy

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

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] Proxy in Swift : https://refactoring.guru/design-patterns/proxy/swift/example

[2] Swift World: Design Patterns — Proxy : https://medium.com/swiftworld/swift-world-design-patterns-proxy-6e2239532a88

[3] 프록시 패턴 (Proxy Pattern in Swift) : https://jerome.kr/entry/proxy-pattern

[4] 프록시 패턴(Proxy Pattern) : https://jdm.kr/blog/235

[5] A Design Pattern Story in Swift – Chapter 12: Proxy : http://audreyli.me/2015/07/07/a-design-pattern-story-in-swift-chapter-12-proxy/

[6] [Design Pattern] 프록시(Proxy) 패턴 : https://palpit.tistory.com/196

[7] 안드로이드에서 Dynamic Proxy 사용하기 : https://www.charlezz.com/?p=759

[8] 프록시 패턴 : https://ko.wikipedia.org/wiki/프록시_패턴

[9] Proxy Design Pattern : https://sourcemaking.com/design_patterns/proxy

[10] Proxy design pattern in iOS : http://devmonologue.com/ios/proxy-design-pattern-ios/

728x90
반응형
Comments