보뇨 다이어리

코틀린 디자인 패턴 - 구조 패턴 이해하기 (퍼사드, 프록시) 본문

컴퓨터 관련/Kotlin 정보

코틀린 디자인 패턴 - 구조 패턴 이해하기 (퍼사드, 프록시)

보뇨 2024. 12. 13. 11:54
반응형

비교적 짧은 내용들이라서 2개의 패턴을 합쳐서 설명하도록하겠습니다.

근데 책을 읽으면서 사실 완전히 공감하는건 아닌데...일단 한번 소스를 보시져!

 

퍼사드 패턴

확장함수를 써서 처리하라고하는데 이게 좀 이해가 안되는게

그렇게되면 중구난방으로 분산되기도 하고 특정 유틸성 클래스를 두는게 좋다고 생각합니다.

무엇보다 퍼사드는 개인적으로 여러개의 ~Service 클래스를 묶어서 하나의 클래스에서 동작시키게끔하는건데 확장함수를 쓰게되면 

성격이 좀 달라진다고 생각하기때문에 참고용으로 기록..!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Chapter03Test {
 
    @Test
    fun facadeTest() {
        val memberService = MemberService()
        memberService.execute()
    }
 
    class MemberService {
 
        private fun doSomething(): String {
            return "hello"
        }
    }
 
    fun MemberService.execute() {
        print("doSomethingElse...")
    }
 
}
cs

 

 

프록시

사실 프록시에는 가상 프록시, 원격 프록시, 보호 프록시 또는 접근 제어 프록시까지 총 3개의 형태가 있는데 책에서는 가상 프록시 형태로 글을 소개하고있습니다. 다른 2개의 프록시 형태도 결국 외곽에서 보면 똑같은데 목적에 따라 이름을 다르게 지은것!

아래 소스를 실행시키면 아래와 같이 출력 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Chapter03Test {
 
    @Test
    fun lazyProxyTest() {
        val catImage = CatImage("smile", "www.naver.com")
        catImage.printImage()
    }
 
    data class CatImage(val thumbnailUrl: String, val url: String) {
        val image: ByteArray? by lazy {
            // 매우 시간이 많이 걸리는 작업
            println("모든게 끝났습니다.")
            null
        }
 
        fun printImage() {
            println("출력하기전...")
            println(image)
            println("출력하기끝!!")
        }
    }
}
cs

 

출력하기전...
모든게 끝났습니다.
null
출력하기끝!!
반응형