티스토리 뷰

상속의 문제점

  • 상위 클래스와 하위 클래스의 결합도가 높아져 상위 클래스의 변화가 하위 클래스에 주는 영향을 예측하기 어렵다.
  • 불필요한 상위 클래스의 메서드까지 구현해야 한다.
  • 하위 클래스로 내려갈수록 기능이 더해져 파악하기 어렵다.
  • final클래스의 경우 상속이 불가능하다.

상속의 대안 위임

  • 특정 처리를 다른 객체에게 넘기는 것을 의미한다.
  • 다른 객체는 클래스 내부(포함)에 가지고 있는다.
  • 코틀린 에서는 by키워드로 클래스 위임을 만들 수 있다.
interface Attackable {
    fun attack()
}

class Knife: Attackable {
    override fun attack() {
        println("attack with knife")
    }
}

class Gun: Attackable {
    override fun attack() {
        println("attack with gun")
    }
}

class Attacker(private val impl: Attackable): Attackable by impl

fun main() {
    val attackerWithKnife = Attacker(Knife())
    attackerWithKnife.attack() // attack with knife

    val attackerWithFun = Attacker(Gun())
    attackerWithFun.attack() // attack with gun
}

 


출처

...더보기
댓글