자바에서는 클래스에 final
이 붙지 않으면 다른 클래스에서 상속이 가능하다.
하지만 코틀린에서의 클래스와 메서드는 기본적으로 final
이다.
따라서 다른 클래스의 상속을 허용하려면 그 클래스 앞에 open
키워드를 붙여야 한다. 또한, override를 허용하고 싶은 메서드나 프로퍼티 앞에도 open
키워드를 붙여야 한다.
open class Person {
// age 메서드는 하위 클래스에서 override 불가능
fun age(): Int {
return 30
}
// 하위 클래스에서 override 가능
open fun name(): String {
return "Hong Gildong"
}
}
class Friend() : Person() {
// age 메서드는 override 불가능
// name 메서드는 open 붙어서 override 가능
override fun name(): String {
return "Kim Gilsun"
}
}
코틀린의 가시성은 자바와 비슷하다. 하지만 자바의 기본 가시성인 패키지 전용은 코틀린에 없다. 대신 internal
이라는 가시성을 제공한다.
internal
은 동일한 모듈 내에 있는 클래스들의 접근을 제한한다. 모듈은 안드로이드의 경우, gradle 프로젝트가 모듈이 될 수 있다.
변경자 | 클래스 멤버 | 최상위 선언 |
---|---|---|
public | 모든 곳에서 사용 가능 | 모든 곳에서 볼 수 있음 |
internal | 같은 모듈 안에서만 사용 가능 | 같은 모듈 안에서만 볼 수 있음 |
protected | 하위 클래스에서만 사용 가능 | 클래스 밖에서는 적용할 수 없음 |
private | 같은 클래스 안에서만 사용 가능 | 클래스 밖에서는 같은 파일 안에서만 사용 가능 |
참고