Proxy Pattern (디자인 패턴 13장)

프록시 패턴 정의

어떤 객체에 대한 접근을 제어하기 위한 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 패턴이다.

프록시 패턴 언제 사용할까!?

원격 프록시 , 가상 프록시 , 보호 프록시 여러가지가 있는데 가상 프록시를 다뤄보자.
네트워크를 통해 이미지를 가져온다고 가정할 때 네트워크 상태와 인터넷 연결 속도에 따라서 시간 소요 되게 된다.
이때 이미지를 불러 오는 동안 Proxy를 사용해서 임의의 이미지를 보여준 다음 실제 이미지를 보여줄 수 있다.
아래 코드를 보자.

class ProxyPattern {
    @Test
    fun test() {
        ImageProxy().showIcon()
    }
}

interface Icon {
    fun showIcon()
}

class ImageIcon : Icon {

    override fun showIcon() {
        download()
        println("ImageIcon 그림")
    }

    private fun download() {
        println("ImageIcon 다운로드")
    }

}

class ImageProxy : Icon {
    var imageIcon: ImageIcon? = null

    override fun showIcon() {
        println("ImageProxy 그림")
        imageIcon = ImageIcon()
        imageIcon?.showIcon()
    }
}

ImageProxy 를 통해 showIcon 메소드를 호출 하게 되면 프록시 임의의 그림을 보여주고 다운로드가 되었을때 실제 이미지 ImageIcon 그림을 보여줄 수 있다.

아래는 테스트 결과이다.