L-j-h-c / TIL

CS, Swift, Java, C++, 개발 관련 공부한 내용 정리
11 stars 0 forks source link

[Design Pattern] Proxy Pattern #38

Closed L-j-h-c closed 2 years ago

L-j-h-c commented 2 years ago

Proxy Pattern이란?

Proxy는 한국말로 대리라는 뜻을 가지는데, 프록시 패턴은 말 그대로 다른 객체에 대한 접근을 제어하는 인터페이스의 역할을 수행해주는 패턴이다. 프록시 패턴에서 실제로 일을 하는 객체가 RealSubject가 되고, 이를 감싸주거나 접근을 제어하는 객체를 Proxy라고 칭한다. Proxy를 통해서 실제 객체가 일을 하기 전후에 특정 처리를 해줄 수도 있고, 캐싱 기능을 이용해 메모리 효율을 올릴 수도 있다.

프로토콜을 사용하여 RealSubject와 Proxy 간의 기능을 일원화한다.

public protocol DatabaseController {
    func save()
    func undo()
}

같은 프로토콜을 RealSubject와 Proxy 모두에 채택해서, 실제 요청하는 client에서는 둘의 차이를 몰라도 되게 만든다.

RealSubject인 CoreDatamanager : 부하가 있는 기능들이 정의되어 있다.

public class CoreDataManager: DatabaseController {
    public init() {
        sleep(3)
    }

    public func save() {
        print("All changes saved")
    }

    public func undo() {
        print("All changes reverted")
    }
}

Proxy인 CoreDataProxy : lazy로 RealSubject를 선언하여 실제 기능이 필요할 때 생성한다.

public class CoreDataProxy: DatabaseController {
    lazy private var coreDataManager: CoreDataManager = CoreDataManager()

    public func save() {
        coreDataManager.save()
    }

    public func undo() {
        coreDataManager.undo()
    }
}

Proxy Pattern의 의의

앱을 실행할 때, 많은 데이터를 가진 객체들이 여럿 있을 때 화면에 보이는 것들만 로드하도록 지연 생성의 기능을 구현할 수 있다. 실제 서비스를 수정하지 않고도 새로운 Proxy를 통하여 다른 기능을 하게 만들 수 있다.

L-j-h-c commented 2 years ago

참고 레포

야곰 닷넷