이 문서는 Google Cloud Translation API를 사용해 자동 번역되었습니다.
어떤 문서는 원문을 읽는게 나을 수도 있습니다.
"리소스" 섹션에 원본 문서에 대한 링크를 추가합니다.
프록시 패턴은 서로게이트 또는 자리 표시자 개체를 다른 개체에 제공하는 소프트웨어 디자인 패턴입니다. 프록시 패턴에서 클래스는 다른 클래스의 기능을 나타냅니다. 이러한 유형의 디자인 패턴은 구조적 패턴에 속합니다.
프록시 패턴에는 네 가지 유형이 있습니다.
이 기사에서는 가상 프록시 패턴에 중점을 둘 것입니다.
가상 프록시는 다른 개체를 나타내는 개체입니다. 실제 개체는 필요할 때만 생성됩니다. 예를 들어 원격 서버에서 로드 중인 이미지입니다. 이미지는 프록시 객체로 표현됩니다. 프록시 개체는 이미지에 대한 요청을 처리합니다. 이미지가 로드되면 프록시 개체가 실제 이미지 개체로 대체됩니다.
가상 프록시를 사용하여 다음을 수행할 수 있습니다.
다음 예제를 사용하여 가상 프록시 패턴을 시연합니다. 사용자를 나타내는 User 클래스가 있습니다. User 클래스에는 이름과 아바타가 있습니다. 아바타는 이미지입니다. 가상 프록시를 사용하여 아바타 이미지를 나타냅니다.
class User(val name: String, val avatar: Image)
Image 클래스는 이미지를 나타냅니다. Image 클래스에는 너비와 높이가 있습니다.
class Image(val width: Int, val height: Int)
ImageProxy 클래스는 Image 클래스의 프록시입니다. ImageProxy 클래스에는 Image 클래스에 대한 참조가 있습니다. ImageProxy 클래스에는 로딩 플래그도 있습니다. 로딩 플래그는 Image 클래스가 로딩 중인지 여부를 추적하는 데 사용됩니다.
class ImageProxy(val image: Image) {
val loading = false
}
loadImage() 함수는 Image 클래스를 로드하는 데 사용됩니다. loadImage() 함수는 이미지 URL과 콜백 함수를 사용합니다. 콜백 함수는 이미지가 로드될 때 호출됩니다.
fun loadImage(imageUrl: String, callback: (Image) -> Unit) {
// TODO: load image from URL
}
main() 함수는 ImageProxy 객체로 User 객체를 생성합니다. ImageProxy 개체는 아바타 이미지를 나타냅니다. loadImage() 함수는 아바타 이미지를 로드하는 데 사용됩니다. 이미지가 로드되면 ImageProxy 개체가 Image 개체로 대체됩니다.
fun main() {
val user = User("Alice", ImageProxy(null))
loadImage("avatar.jpg") { image ->
user.avatar = image
}
}
가상 프록시 패턴은 다음과 같은 경우에 사용해야 합니다.
가상 프록시 패턴에는 다음과 같은 이점이 있습니다.
가상 프록시 패턴에는 다음과 같은 단점이 있습니다.