웹사이트 검색

Kotlin 가시성 수정자 - 공개, 보호, 내부, 비공개


이 튜토리얼에서는 Kotlin 프로그래밍에서 사용할 수 있는 다양한 Visibility Modifiers에 대해 설명합니다.

Kotlin 가시성 수정자

가시성 수정자는 Kotlin의 클래스/인터페이스/속성/함수에 추가될 때 모든 항목이 표시되는 위치와 모든 항목에 액세스할 수 있는 위치를 정의하는 수정자입니다. Kotlin의 속성 설정자는 속성과 별도의 한정자를 가질 수 있습니다. 게터는 가시성 수정자를 정의할 수 없습니다. 속성과 동일한 한정자를 사용합니다. 다음은 가시성 수정자입니다.

  • 공개
  • 보호됨
  • 내부
  • 비공개

공개 수정자

Public Modifier는 Kotlin의 기본 수정자입니다. Java 공개 수정자와 마찬가지로 선언이 모든 곳에서 표시됨을 의미합니다.


class Hello{
}

public class H{
}

fun hi()
public fun hello()

val i = 0
public val j = 5

위의 모든 선언은 파일의 최상위 수준에 있습니다. 모두 공개됩니다. 클래스 멤버의 선언을 언급하지 않으면 공개됩니다(재정의되지 않는 한).

보호된 수정자

open class Pr{
    protected val i = 0
}

class Another : Pr{

    fun iValue() : Int
    {
        return i
    }
}

Pr의 하위 클래스가 아닌 클래스는 보호되는 i 선언에 액세스할 수 없습니다. 재정의 시 명시적으로 변경하지 않는 한 하위 클래스에서 동일한 보호 한정자를 갖게 됩니다.

open class Pr{
    open protected val i = 0
}

class Another : Pr(){

    fun iValue() : Int
    {
        return i
    }
    
    override val i = 5 //protected visibility
}

위에서 정의한 Kotlin의 Protected Modifiers 개념은 Java의 개념과 다릅니다.

내부 수정자

Internal은 Java에는 없는 Kotlin에서 사용할 수 있는 새로운 한정자입니다. 선언을 내부로 설정하면 동일한 모듈에서만 사용할 수 있습니다. Kotlin에서 모듈이란 함께 컴파일되는 파일 그룹을 의미합니다.

internal class A {
}

internal val x = 0

이들은 현재 모듈 외부에서 볼 수 없습니다. 내부 수정자는 특정 라이브러리 구현을 사용자에게 숨겨야 할 때 유용합니다. Java의 패키지 개인 가시성을 사용하면 불가능했습니다.

비공개 수정자

Private 한정자는 선언이 현재 범위 외부에서 표시되는 것을 허용하지 않습니다.

var setterVisibility: String = "abc"
private set

open class Pr{
    open protected val i = 0

    fun iValue() : Int
    {
        setterVisibility = 10
        return setterVisibility
    }
}

kotlin은 여러 최상위 정의를 허용하므로 위의 코드가 작동합니다. 아래는 안됨

private open class ABC{
    private val x = 6
}

private class BDE : ABC()
{
    fun getX()
    {
        return x //x cannot be accessed here.
    }
}

x는 해당 클래스 내부에서만 볼 수 있습니다. 다음과 같은 방법으로 개인 생성자를 설정할 수 있습니다.

class PRIV private constructor(a: String) {
 ... 
}

기본적으로 클래스에는 공용 생성자가 있습니다. 클래스가 가는 곳마다 생성자가 따라옵니다. 정의 자체에서 생성자에 대한 가시성 수정자를 설정해야 합니다. 따라서 Kotlin은 보호 및 내부 수정자를 Java와 다르게 사용합니다. 또한 Java의 기본 수정자는 아직 Kotlin에 없는 package-private입니다. 이것으로 Kotlin의 Visibility Modifiers에 대한 이 빠른 자습서를 마칩니다.