- 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 |
- 정렬
- swift 알고리즘
- 코딩테스트
- 프로그래머스
- 감성에세이
- Algorithm
- 알고리즘
- 다트
- Design Pattern
- 스위프트
- datastructure
- programmers
- 프로그래머스 레벨2
- coding test
- sort
- dart
- 프로그래머스 level1
- 정렬 알고리즘
- 코테
- 정렬알고리즘
- 프로그래머스 swift
- swift
- swift 코딩테스트
- 자료구조
- swift split
- rxswift
- programmer
- 스위프트디자인패턴
- 디자인 패턴
- 디자인패턴
Bill Kim's Life...
[디자인패턴] Proxy(프록시) : 가상의 객체를 만들어서 흐름 제어 본문
디자인패턴에의 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/
'CS(컴퓨터 과학) > Design Patterns' 카테고리의 다른 글
[디자인패턴] Mediator(중재자) : 복잡한 의존 관계와 로직은 캡슐화 (0) | 2020.06.12 |
---|---|
[디자인패턴] Strategy(전략) : 클래스의 기능을 캡슐화하여 동적으로 변경 (0) | 2020.06.12 |
[디자인패턴] Observer(옵저버) : 객체에서 발생하는 이벤트를 구독-전달 (0) | 2020.06.12 |
[디자인패턴] Flyweight : 객체 생성을 이미 있다면 공유 및 참조 (0) | 2020.06.12 |
[디자인패턴] Command(커맨드) : 실행될 기능을 캡슐화하여 여러 기능을 실행 (0) | 2020.06.12 |