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에 대한 이 빠른 자습서를 마칩니다.