SlideShare a Scribd company logo
1 of 12
Download to read offline
SWIFT
Proxy
Bill Kim(김정훈) | ibillkim@gmail.com
목차
•Proxy
•Structure
•Implementation
•References
Proxy
Proxy(프록시)패턴은 실제 기능을 수행하는 객체(Real Object)(대
신 가상의 객체(Proxy Object)를 사용해 로직의 흐름을 제어하는
디자인 패턴입니다.
즉 Proxy 객체를 이용하여 원래 객체의 변경없이 기능을 특정 방
식을 제어할 수 있게 도와줍니다.
Structure
Proxy 패턴을 UML로 도식화하면 아래와 같습니다.
Structure
Proxy 패턴을 실생활에서의 예시로 보면 아래와 같은 현상을 볼
수 있습니다.
Structure
Subject : Client가 직접 접근하여 기능을 수행하는 추상 부모 클
래스, 해당 클래스를 RealSubject가 상속을 받아서 실제 기능에
대한 구현을 수행한다.
RealSubject : 실제 기능을 수행하는 객체
Proxy : RealSubject 객체 대신에 기능을 위임받아 수행하는 역
할을 하는 객체, 해당 Proxy 객체가 실제 객체의 기능 및 추가적인
기능을 수행한다.
Implementation
구체적인 구현에 대해서 소스 코드를 통하여 살펴봅니다.
protocol Subject {
func request()
}
class RealSubject : Subject {
func request() {
print("RealSubject request.")
}
}
Implementation
class Proxy : Subject {
private var realSubject: RealSubject
init(_ realSubject: RealSubject) {
self.realSubject = realSubject
}
func request() {
print("Proxy request.")
otherFunction()
}
private func otherFunction() { }
}
Implementation
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.
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/
References
[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/
Thank you!

More Related Content

Similar to [Swift] Proxy

Javascript 객체생성패턴
Javascript 객체생성패턴Javascript 객체생성패턴
Javascript 객체생성패턴
KIM HEE JAE
 

Similar to [Swift] Proxy (15)

[Swift] Decorator
[Swift] Decorator[Swift] Decorator
[Swift] Decorator
 
MEC++ 5
MEC++ 5MEC++ 5
MEC++ 5
 
Java script의 이해
Java script의 이해Java script의 이해
Java script의 이해
 
Angular js 의존관계 주입과 서비스
Angular js 의존관계 주입과 서비스Angular js 의존관계 주입과 서비스
Angular js 의존관계 주입과 서비스
 
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기
 
React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
 
Proxy pattern
Proxy patternProxy pattern
Proxy pattern
 
Javascript 객체생성패턴
Javascript 객체생성패턴Javascript 객체생성패턴
Javascript 객체생성패턴
 
Design Pattern 3
Design Pattern 3Design Pattern 3
Design Pattern 3
 
[Swift] Adapter
[Swift] Adapter[Swift] Adapter
[Swift] Adapter
 
[스프링 스터디 2일차] AOP
[스프링 스터디 2일차] AOP[스프링 스터디 2일차] AOP
[스프링 스터디 2일차] AOP
 
Software Architect day - 웹 프레임워크 종결 - metaworks3
Software Architect day - 웹 프레임워크 종결 -  metaworks3Software Architect day - 웹 프레임워크 종결 -  metaworks3
Software Architect day - 웹 프레임워크 종결 - metaworks3
 
Effective java
Effective javaEffective java
Effective java
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 

More from Bill Kim

More from Bill Kim (20)

[Algorithm] Sorting Comparison
[Algorithm] Sorting Comparison[Algorithm] Sorting Comparison
[Algorithm] Sorting Comparison
 
[Algorithm] Big O Notation
[Algorithm] Big O Notation[Algorithm] Big O Notation
[Algorithm] Big O Notation
 
[Algorithm] Shell Sort
[Algorithm] Shell Sort[Algorithm] Shell Sort
[Algorithm] Shell Sort
 
[Algorithm] Radix Sort
[Algorithm] Radix Sort[Algorithm] Radix Sort
[Algorithm] Radix Sort
 
[Algorithm] Quick Sort
[Algorithm] Quick Sort[Algorithm] Quick Sort
[Algorithm] Quick Sort
 
[Algorithm] Heap Sort
[Algorithm] Heap Sort[Algorithm] Heap Sort
[Algorithm] Heap Sort
 
[Algorithm] Counting Sort
[Algorithm] Counting Sort[Algorithm] Counting Sort
[Algorithm] Counting Sort
 
[Algorithm] Selection Sort
[Algorithm] Selection Sort[Algorithm] Selection Sort
[Algorithm] Selection Sort
 
[Algorithm] Merge Sort
[Algorithm] Merge Sort[Algorithm] Merge Sort
[Algorithm] Merge Sort
 
[Algorithm] Insertion Sort
[Algorithm] Insertion Sort[Algorithm] Insertion Sort
[Algorithm] Insertion Sort
 
[Algorithm] Bubble Sort
[Algorithm] Bubble Sort[Algorithm] Bubble Sort
[Algorithm] Bubble Sort
 
[Algorithm] Binary Search
[Algorithm] Binary Search[Algorithm] Binary Search
[Algorithm] Binary Search
 
[Algorithm] Recursive(재귀)
[Algorithm] Recursive(재귀)[Algorithm] Recursive(재귀)
[Algorithm] Recursive(재귀)
 
[Swift] Data Structure - AVL
[Swift] Data Structure - AVL[Swift] Data Structure - AVL
[Swift] Data Structure - AVL
 
[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree
 
[Swift] Data Structure - Graph(BFS)
[Swift] Data Structure - Graph(BFS)[Swift] Data Structure - Graph(BFS)
[Swift] Data Structure - Graph(BFS)
 
[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)
 
[Swift] Data Structure - Binary Tree
[Swift] Data Structure - Binary Tree[Swift] Data Structure - Binary Tree
[Swift] Data Structure - Binary Tree
 
[Swift] Data Structure - Tree
[Swift] Data Structure - Tree[Swift] Data Structure - Tree
[Swift] Data Structure - Tree
 
[Swift] Data Structure - Graph
[Swift] Data Structure - Graph[Swift] Data Structure - Graph
[Swift] Data Structure - Graph
 

[Swift] Proxy

  • 3. Proxy Proxy(프록시)패턴은 실제 기능을 수행하는 객체(Real Object)(대 신 가상의 객체(Proxy Object)를 사용해 로직의 흐름을 제어하는 디자인 패턴입니다. 즉 Proxy 객체를 이용하여 원래 객체의 변경없이 기능을 특정 방 식을 제어할 수 있게 도와줍니다.
  • 4. Structure Proxy 패턴을 UML로 도식화하면 아래와 같습니다.
  • 5. Structure Proxy 패턴을 실생활에서의 예시로 보면 아래와 같은 현상을 볼 수 있습니다.
  • 6. Structure Subject : Client가 직접 접근하여 기능을 수행하는 추상 부모 클 래스, 해당 클래스를 RealSubject가 상속을 받아서 실제 기능에 대한 구현을 수행한다. RealSubject : 실제 기능을 수행하는 객체 Proxy : RealSubject 객체 대신에 기능을 위임받아 수행하는 역 할을 하는 객체, 해당 Proxy 객체가 실제 객체의 기능 및 추가적인 기능을 수행한다.
  • 7. Implementation 구체적인 구현에 대해서 소스 코드를 통하여 살펴봅니다. protocol Subject { func request() } class RealSubject : Subject { func request() { print("RealSubject request.") } }
  • 8. Implementation class Proxy : Subject { private var realSubject: RealSubject init(_ realSubject: RealSubject) { self.realSubject = realSubject } func request() { print("Proxy request.") otherFunction() } private func otherFunction() { } }
  • 9. Implementation 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.
  • 10. 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/
  • 11. References [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/