추상 클래스 알아보기

추상 클래스

fun main() {
    val man = Man("지원").apply {
        println(name)
        displayJob("안드로이드 개발자")
        println(age)
        displaySSN(1234)
    }
}

class Man(override val name: String) : Person(name) {
    override fun displayJob(description: String) { println("$name 님의 직업은 $description 입니다.") }
    override fun displaySSN(ssn: Int) { super.displaySSN(ssn) } // 재정의 필수 아님.
}

abstract class Person(name: String) {
    init { println("이름은 $name") }

    var age: Int = 40  // 일반 속성
    abstract val name: String // 추상 속성

    open fun displaySSN(ssn: Int) { println("주민번호 is : $ssn") } // 일반 메서드
    abstract fun displayJob(description: String) // 추상 메서드
}

이름은 지원
지원
지원 님의 직업은 안드로이드 개발자 입니다.
40
주민번호 is : 1234

추상 클래스 활용

abstract class BaseActivity<T : ViewDataBinding>(@LayoutRes private val layoutId: Int) : AppCompatActivity() {
    protected val binding: T by lazy(LazyThreadSafetyMode.NONE) {
        DataBindingUtil.setContentView(this, layoutId)
    }

    init {
        addOnContextAvailableListener {
            binding.notifyChange()
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding.lifecycleOwner = this
    }

    override fun onDestroy() {
        binding.unbind()
        super.onDestroy()
    }

    protected inline fun bind(block: T.() -> Unit) {
        binding.apply(block)
    }
}

인터페이스 알아보기

클래스와 인터페이스의 차이

상속과 구현의 차이