Hanbit the Developer

Kotlin Documentation | Visibility modifiers 본문

Kotlin

Kotlin Documentation | Visibility modifiers

hanbikan 2023. 5. 22. 18:06

Kotlin Documentation 시리즈에 대해

Category: Concepts - Classes and objects

문서 링크: https://kotlinlang.org/docs/visibility-modifiers.html


Packages

함수, 프로퍼티, 클래스, 오브젝트, 인터페이스는 패키지 내에서 top-level단에 선언될 수 있다:

// file name: example.kt
package foo

fun baz() { ... }
class Bar { ... }
  • private: 해당 파일에서만 보임
  • internal: 같은 모듈에서만 보임
  • public

Class members

  • private: 해당 클래스에서만 보임
  • protected: private와 같으나 subclasses에는 공개됨
  • internal: 같은 모듈 내에서 접근 가능
  • public

*protected, internal member를 override하면 접근 지정자를 그대로 두어야 한다:

open class Outer {
    private val a = 1
    protected open val b = 2
    internal open val c = 3
    val d = 4  // public by default

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

class Subclass : Outer() {
    // a is not visible
    // b, c and d are visible
    // Nested and e are visible

    override val b = 5   // 'b' is protected
    override val c = 7   // 'c' is internal
}

class Unrelated(o: Outer) {
    // o.a, o.b are not visible
    // o.c and o.d are visible (same module)
    // Outer.Nested is not visible, and Nested::e is not visible either
}

*inner class, nested class에서 outer class의 프로퍼티에 언제나 접근할 수 있었다:

private class A {
    private val a = 2 // protected여도 접근 가능

    class B {
        val b = A().a
    }

    inner class C {
        val c = a
    }
}

Constructors

class C private constructor(a: Int) { ... }