Delegate Pattern
2023. 5. 3. 16:48ㆍ개발/최적화
Delegate Pattern
- 어떤 객체가 기능을 수행할 때, 해당 기능을 다른 객체에게 위임하는 패턴
상속과의 차이
- 객체 안에 새로운 기능 / 객체를 구성하는 composition을 사용
프로세스
1과 2는 dependency 관계 , 2와 3은 implement관계.
2에는 1이 필요한 부분을 정의함. 3은 2를 구현함
kotlin에서 by를 사용하면 쉽게 가능
// 부동산과 관련된 권한들
interface Authority {
fun stampSeal() // 도장 찍기
... // 기타 등등
}
// 부동산에 대해서 내가 행사할 수 있는 권리가 있어!
class Customer(private val name: String) : Authority {
// Authority 인터페이스 구현
override fun stampSeal() {
println("${name} 도장 쾅")
}
}
// 저는 중개인 입니다. 제가 대신 손님의 집을 알아봐드릴게요
class Broker(private val customer: Authority) : Authority by customer {
// by 키워드를 통해 customer 파라미터에게 권한을 위임
}
fun main() {
//개발자K씨
val developerK = Customer("개발자K씨")
//부동산중개인G씨
val brokerG = Broker(developerK)
bokerG.stampSeal() // 개발자K씨에게 권한을 위임받아서 도장찍겠습니다 ㅎㅎ
}
getValue를 오버로딩하면 변수 선언 단계에서 by 키워드를 사용할 수 있음
interface Authority {
fun stampSeal()
}
class Customer(private val name: String) : Authority {
// Authority 인터페이스 구현
override fun stampSeal() {
println("${name} 도장 쾅")
}
// getValue() 연산자 오버로딩
operator fun getValue(nothing: Nothing?, property: KProperty<*>): Broker {
return Broker(this)
}
}
class Broker(private val customer: Authority) : Authority by customer {}
fun main() {
// 개발자K씨의 권한을 위임받은 중개인G씨
val brokerG: Broker by Customer("K")
bokerG.stampSeal() // 개발자K씨에게 권한을 위임받아서 도장찍겠습니다 ㅎㅎ
}
'개발 > 최적화' 카테고리의 다른 글
뷰모델 중복 이슈 해결 (0) | 2023.05.03 |
---|---|
QA / release모드 변경 (0) | 2023.05.03 |
안드로이드 아키텍쳐 (0) | 2023.05.03 |
firebase app distribution + fastlane을 이용한 앱 배포 자동화(window)(2) - 배포 완료시 슬랙 알람 추가하기 (2) | 2022.10.07 |
case를 효과적으로 다루는 방법 (1) | 2022.10.07 |