English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Kotlin 접근성修飾자

이 문서에서, 여러분은 Kotlin에서4가지고, 그리고 그들이 다른 상황에서 어떻게 작동하는지.

可见성 지시자는 클래스, 객체, 인터페이스, 생성자, 함수, 속성 및 설정자의可见성(접근성)을 설정하는 데 사용되는 키워드입니다。(getters의 visible성 지시자를 설정할 수 없습니다. 왜냐하면 그들은 항상 속성과 같은 visible성을 가지기 때문입니다.)

제목Kotlin 클래스와 객체문장에서, 여러분은 public과 private可见성 지시자를 간단히 이해했습니다. 이 문서에서는 다른 두 개의可见성 지시자인 protected와 internal(또한 public과 private)를 자세히 알아보겠습니다.

패키지 내의 visible 수식자

패키지는 관련된 함수, 속성, 클래스, 객체 및 인터페이스를 조직합니다.

수식자설명
public어디서든 보입니다
private선언이 포함된 파일 내에서 보입니다
internal같은 모듈 내에서 보입니다(함께 컴파일되는 Kotlin 파일 집합)
protected패키지에 사용할 수 없습니다(자식 클래스에 사용)

주의:visible 수식자가 지정되지 않으면 기본적으로 public 값으로 설정됩니다.

예를 들어 보겠습니다:

//파일 이름: hello.kt
package test
fun function1() {}   //기본적으로 공개적이며 어디서든 보입니다
private fun function2() {}   //hello.kt 내에서 보입니다
internal fun function3() {}   //같은 모듈 내에서 보입니다
var name = "Foo"   //어디서든 볼 수 있습니다
    get() = field   //hello.kt 내에서 보입니다(그 속성과 같습니다)
    private set(value) {   //hello.kt 내에서 보입니다
        field = value
    }
private class class1 {}   //hello.kt 내에서 보입니다

클래스 및 인터페이스 내의 visible 수식자

아래는 visible 수식자가 클래스 내에서 멤버(기능, 속성)에 작동하는 방식입니다:

수식자설명
public클래스의 선언을 볼 수 있는 모든 클라이언트에 대한 접근 가능
private클래스 내에서만 보입니다
protected클래스 및 자식 클래스 내에서 보입니다
internal모듈 내에서는 클래스의 선언을 볼 수 있는 모든 클라이언트에 대한 접근 가능

주의:protected 멤버를 파생 클래스에서 재정의했을 때 그可见성을 지정하지 않으면 그 visible성도 protected입니다.

예를 들어 보겠습니다:

open class Base() {
    var a = 1                 //기본적으로 공개됩니다
    private var b = 2         // Base 클래스는 private입니다
    protected open val c = 3  //Base 클래스와 Derived 클래스에 대한 접근 가능
    internal val d = 4        //같은 모듈 내에서 보입니다
    protected fun e() { }     //Base 클래스와 Derived 클래스에 대한 접근 가능
}
class Derived: Base() {
    // a, c, d, 및 e()Base 클래스의 모든 속성은 보입니다
    // b는 숨겨져 있습니다
    override val c = 9        // c는 protected입니다
}
fun main(args: Array<String>) {
    val base = Base()
    //base.a와 base.d는 보입니다
    // base.b, base.c 및 base.e()은 숨겨져 있습니다
    val derived = Derived()
    // derived.c은 보이지 않습니다.
}

생성자 접근성 변경

기본적으로 생성자의 접근성은 public입니다. 그러나 변경할 수 있습니다. 이를 위해 constructor 키워드를 명시적으로 추가해야 합니다.

아래의 예제에서 생성자는 기본적으로 public입니다:

class Test(val a: Int) {
    // code
}

그의 접근성을 변경할 수 있습니다. 다음과 같은 방법으로 변경할 수 있습니다.

class Test private constructor(val a: Int) {
    // code
}

이 곳의 생성자는 private입니다.

주의:  Kotlin에서는, 지역 함수, 변수 및 클래스에 접근성修飾자를 가질 수 없습니다.