Programming Language/Kotlin

[Kotlin] Abstract class

개발왕 금골드 2023. 2. 28. 20:43
반응형

소개

abstract class는 template class 처럼 사용할 수 있다. 하나의 설계도 혹은 청사진으로써 그 역할을 한다. 독립적으로는 어떠한 행동을 할 수 없으며 다른 class와의 관계를 통해서 그 역할을 한다.
abstract class 안에 멤버는 하나 이상 abstract로 선언될 수 있으며, 선언된 멤버는 구현체를 갖지 않는다. 또한, abstract로 선언되었다면 open 키워드를 사용할 필요가 없다. abstract 로 선언된 멤버는 반드시 abstract class를 상속 받고 있는 클래스 내에서 구현되어야 하기 때문이다.

abstract class Rectangle() {
	val vertex = 4 // 꼭지점의 개수. 불변. 확정.
	abstract val width: Int // width는 가변.
	abstract val height: Int // height는 가변.

	fun getSize(): Int = width * height // 불변.
	abstract fun isSquare() // 정사각형 or 직사각형을 판별하는 함수. 가변.
}


예제를 통해 알 수 있듯이, abstract class는 여러 클래스에서 사용하는 추상적인 부분(=공통으로 사용하는 프로퍼티나 메서드)들을 모아 놓은 클래스이다. 그 자체로는 인스턴스화할 수 없는 미완성 클래스이다. abstract class 내부 변수나 함수 또한 abstract로 선언할 수 있으며 abstract로 선언된 값들은 상속받는 곳에서 반드시 구현되어야 한다.

open class Polygon {
    open fun draw() {
        // some default polygon drawing method
    }
}

abstract class WildShape : Polygon() {
    // Classes that inherit WildShape need to provide their own
    // draw method instead of using the default on Polygon
    abstract override fun draw()
}

open 키워드가 붙은 non-abstract를 abstract에 오버라이드할 수 있다.


결론

abstract class는 절대 변하지 않는 값을 공통으로 사용하기 위해 만들 때 유용하다. 하지만, 클라이언트 개발 시 변하지 않는 값은 거의 없다. 그렇기 때문에 abstract class 처럼 내부에 정해진 변수나 함수가 있다면 여기에 의존하게 되고 유연성이 감소한다. 이러한 변화에 대해서 유연성까지 가져가기 위해서는 abstract보다 interface를 구현하는 것이 추천된다.


Kotlin Docs 번역
참고자료 :
Classes | Kotlin

Classes | Kotlin

kotlinlang.org

 

반응형