가시성 제한자

  • 가시성 제한자를 가질 수 있음 : 클래스, 오브젝트, 인터페이스, 생성자, 함수, 프로퍼티, Setter
    • Getter는 항상 프로퍼티와 같은 가시성을 가짐
  • private, protected, internal, public (기본)

패키지

  • 함수, 프로퍼티, 클래스, 오브젝트, 인터페이스는 "최상위 레벨", 즉 패키지 내부에 직접 선언 가능
// file name: example.kt
package foo

fun baz() {}
class Bar {}
  • public : 모든 곳에서 접근 가능
  • private : 해당 선언이 포함된 파일에서만 접근 가능
  • internal : 같은 모듈 안에서 접근 가능
  • protected : 최상위 레벨 선언은 불가능

클래스와 인터페이스

클래스 내부에 선언된 멤버의 경우

  • private : 클래스 내부에서만 접근 가능
  • protected : private 와 동일하며 하위 클래스에서만 접근 가능
  • internal : 선언한 클래스에 접근할 수 있는 모듈내의 클라이언트에서 internal 멤버 접근 가능
  • public : 선언한 클래스에 접근할 수 있는 클라이언트에서 public 멤버 접근 가능

Java 유저 주의사항 : 외부 클래스는 Kotlin 내부 클래스의 private 멤버를 볼 수 없다

protected 멤버를 오버라이딩할 경우 명시적으로 가시성 제한자를 지정하지 않는 경우, protected 가시성을 가진다

open class Outer {
    private val a = 1
    protected open val b = 2
    internal val c = 3
    val d = 4  // 기본으로 public

    protected class Nested {
        public val e: Int = 5
    }
}

class Subclass : Outer() {
    // a 접근 불가능
    // b, c 와 d 접근 가능
    // Nested 와 e 접근 가

    override val b = 5   // 'b' 는 protected
}

class Unrelated(o: Outer) {
    // o.a, o.b 접근 불가능
    // o.c (같은 모듈일 경우)와 o.d 접근 가능 
    // Outer.Nested 접근 불가능, Nested::e 접근 불가능 
}

생성자

  • 생성자에 가시성을 지정할 경우, 명시적으로 constructor 키워드를 추가해야한다
class C private constructor(a: Int) { ... }

로컬 선언

로컬 변수, 함수, 클래스에는 가시성 제한자를 지정할 수 없다

모듈

멤버가 동일한 모듈에서 접근 가능하다는 의미. 즉, 모듈은 같이 컴파일된 Kotlin 파일의 세트이다

  • Intellij IDEA 모듈
  • Maven 혹은 Gradle 프로젝트
  • 1번의 호출로 컴파일된 일련의 파일 Ant Task

results matching ""

    No results matching ""