이 포스팅은 Kotlin in Action, 드미트리 제메로프 & 스베트라나 이사코바, 에이콘출판사(2017)을 읽고 개인 학습용으로 정리한 글입니다.
interface Person{
fun work()
fun sleep()
}
class Student: Person{
override fun work() = println("work")
override fun sleep() = println("sleep")
fun study() = println("study")
}
LazyStudent 라는 클래스를 만들고 싶다.
Student 클래스를 상속하여 기존 기능들은 그대로 유지하고,
"game"문자열을 출력하는 game메서드를 새로 추가하고 싶다.
하지만 Student 클래스는 open 클래스가 아니므로 상속 불가능하다.
이럴 때 LazyStudent를 어떻게 구현해야하는가?
(hint: 클래스 위임)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
//데코레이터 패턴
class LazyStudent: Person{
val student = Student()
override fun work() = student.work()
override fun sleep() = student.sleep()
fun study() = student.study()
fun game() = println("game")
}
//by 키워드
class LazyStudent(val student: Student): Person by student{
fun study() = student.study()
fun game() = println("game")
}