-
Delegation Pattern 위임 패턴Design Pattern 2021. 9. 3. 13:55
위임이란 행동(권한이나 일처리 등)을 다른 객체에게 맡기는 것
위탁자: 객체1 ->(위임)-> 수탁자: 객체2
객체1의 모든 행동을 객체2가 대신할 수 있도록 위임
나의 일처리를 친구에게 위임
친구가 나의 일처리를 대신함
package com.test.kotlinpractice.delegation interface WorkList{ //작업 리스트 fun water() fun repair() fun buyParts() } class Me():WorkList{ //나의 작업 리스트 override fun water(){ println("Me의 화분에 물을 주는중") } override fun repair(){ println("Me의 의자를 고치는중") } override fun buyParts() { println("Me의 카드로 부품을 구매") } } class Friend(var me:Me){ //나의 작업을 친구에게 위임 fun water(){ me.water() } fun repair(){ me.repair() } fun buyParts(){ me.buyParts() } } fun main(){ var me:Me=Me() //나의 행동,권한(함수)들을 친구에게 위임 var friend1:Friend=Friend(me) var friend2:Friend= Friend(me) var friend3:Friend= Friend(me) friend1.water() //me 대신 친구1이 물을 줌 friend2.repair() //me 대신 친구2가 의자를 수리함 friend3.buyParts() //me 대신 친구3가 me의 카드로 부품 구매 }
나의 권한을 친구가 할 수 있도록 위임
package com.test.kotlinpractice.delegation interface Contract{ fun makeContract() } class Me():Contract{ override fun makeContract() { println("부동산 계약하기") } } class Friend(var me:Me){ fun makeContract(){ me.makeContract() } } fun main(){ var me:Me=Me() //나의 권한(함수)을 친구에게 위임 var friend1:Friend=Friend(me) //친구가 나 대신 계약을 진행 friend1.makeContract() }
위임은 has a 관계
상속을 대체할 수 있다.
상속에 해당하는 is a 관계가 하나라도 만족하지 않을 경우 상속으로 적절하지 않아 위임을 사용해야한다.