클래스의 위임은 특정 클래스에 자기 클래스가 할 일을 다른 클래스에 맡겨 처리하는 것
위탁자 : 위임을 맡기는 클래스
수탁자 : 위임을 받아서 실제 처리하는 클래스
interface Base { // 인터페이스 정의
fun say()
}
fun main(args: Array<String>) {
class BaseImpl(val x: Int): Base{ // 인터페이스를 구현한 위임클래스 정의
override fun say() { // 메서드 구현
println("베이스 클래스 구현 : " + x)
}
}
class Derived(b: BaseImpl) : Base { // 인터페이스를 구현하고 위임 처리할 객체를 인자로 받음
override fun say() { // 위임 처리할 메서드 구현
b.say() // 실제 처리할 메서드 구현
}
}
val b = BaseImpl(10) // 위임 객체를 만든다
Derived(b).say() // 실제 사용할 객체를 만들고 메서드 호출
}
왜인지 모르겠으나 오류가 뜸 Kotlin: Unresolved reference: b
interface Base { // 인터페이스 정의
fun say()
}
fun main(args: Array<String>) {
class BaseImpl(val x: Int): Base{ // 인터페이스를 구현한 위임클래스 정의
override fun say() { // 메서드 구현
println("베이스 클래스 구현 : " + x)
}
}
class Derived_() : Base by BaseImpl(10) //클래스 객체를 생성해서 by로 위임
// 인터페이스는 상속했기에 클래스 내부에서 메서드 사용 가능
Derived_().say() // 인터페이스의 메서드 실행
}
베이스 클래스 구현 : 10
생성자의 매개변수 속성으로 위임 처리
이렇게 하면 여러 클래스에 대한 위임 처리가 가능해짐
interface Sayable { // 인터페이스 정의
fun say()
}
fun main(args: Array<String>) {
class Person(val x: String): Sayable{ // 인터페이스를 구현한 위임클래스 정의
override fun say() { // 메서드 구현
println("안녕하세요 " + x)
}
}
class Pet(val x: String): Sayable{ // 인터페이스를 구현한 위임클래스 정의
override fun say() { // 메서드 구현
println("멍멍 " + x)
}
}
val ps = Person("사람")
val pt = Pet("개")
class Saying(val say: Sayable) : Sayable by say // 매개변수로 전달한 객체로 위임 처리
// 인터페이스를 가지고 위임 처
Saying(ps).say()
Saying(pt).say()
}