class, object, interface, constructors, function, properties, getter/setter 등에 적용 가능함
public
: 어디에서든지 접근 가능. 기본적으로 지정하지 않으면 public
private
: 선언자가 포함된 파일 내에서 접근 가능. 클래스 지정 시, 클래스 내부에서만 접근 가능함
internal
: 동일 모듈 내에서 접근 가능. - 코틀린 파일 셋은 동시에 컴파일 됨
protected
: 서브 클래스에서 접근 가능
open class Base() {
// 기본적으로 접근제어는 public으로 지정된다.
var a = 1
// Base class 내부에서만 접근이 가능한 private
private var b = 2
// Base class와 Base를 상속받은 객체에서 접근가능
protected open val c = 3
// 동일한 모듈 내에서만 접근가능
internal val d = 4
// Base 와 상속받은 객체에서 접근이 가능하다.
protected fun e() {}
}
class Derived: Base {
// a, c, d, e() 는 접근이 가능하다.
// b는 접근이 불가능하다.
// c는 protected를 그대로 상속받는다.
override val c = 9
}
fun main(args: Array<String>) {
val base = Base()
// base.a 와 base.d 는 접근이 가능하다.
// base.b 와 base.c, base.e() 는 접근이 불가능하다.
val derived = Derived()
// derived.c 는 접근이 불가능하다.
}