[kotlin] 추상 클래스의 가시성과 상속에 대한 영향

코틀린에서는 추상 클래스를 사용하여 추상적인 개념을 표현하고, 해당 클래스를 상속받아 구체적인 동작을 구현할 수 있습니다. 이번 블로그 포스트에서는 추상 클래스의 가시성과 상속에 대한 영향을 알아보겠습니다.

1. 추상 클래스의 가시성

코틀린에서 추상 클래스는 기본적으로 open 가시성을 갖습니다. 따라서, 다른 클래스에서 해당 추상 클래스를 상속받아 구현할 수 있습니다. 또한, 추상 클래스의 멤버 함수나 프로퍼티의 가시성을 명시적으로 지정하여 하위 클래스에서 사용할 수 있는 범위를 조절할 수 있습니다.

예를 들어, 다음은 가시성을 명시적으로 지정한 추상 클래스의 예시입니다.

// 추상 클래스
abstract class Shape {
    // protected 가시성을 갖는 멤버 함수
    protected abstract fun draw()

    // internal 가시성을 갖는 멤버 프로퍼티
    internal abstract val color: String
}

2. 추상 클래스의 상속

추상 클래스를 상속받는 클래스에서는 상속받은 멤버 함수와 프로퍼티를 구현해야 합니다. 이때, 상속받은 멤버 함수의 가시성보다 더 강한 가시성을 지정할 수 없습니다. 즉, 추상 클래스의 멤버 함수보다 더 넓은 범위의 가시성을 갖는 멤버 함수를 구현할 수 없습니다.

다음은 추상 클래스를 상속받아 구현하는 예시입니다.

// 추상 클래스를 상속받는 클래스
class Circle : Shape() {
    // 추상 멤버 함수를 구현
    override fun draw() {
        // 구현 내용
    }

    // 추상 멤버 프로퍼티를 구현
    override val color: String
        get() = "red"
}

결론

추상 클래스의 가시성과 상속은 코틀린에서 객체지향 프로그래밍을 할 때 중요한 요소입니다. 적절한 가시성과 상속을 활용하여 모듈화되고 유연한 코드를 작성할 수 있습니다.

참고 문헌: 코틀린 공식 문서