kotlin - Visibility modifiers

Visibility modifiers

Java의 접근 제어자(Access Modifier)와 유사하게 Kotlin에서 사용되는 제어자이다.

Kotlin에서는 private , protected , internal , public 총 4가지의 가시성 제어자를 사용한다.

private

해당 private를 선언한 범위에서만 사용가능하다. 클래스 내에서 사용하였다면 클래스 내에서만 사용가능하며, 파일 내에서 선언 하였다면 해당 파일 내에서만 사용 가능하다.

private const val privateVariable = 0;

class ExampleClass {

    private val privateField: Int = 0;
}

fun print() {
    println(privateVariable)    // privateVariable is visible

    val exampleClass: ExampleClass = ExampleClass()
    println(exampleClass.privateField)  // exampleClass.privateField is not visible
}

protected

해당 protected를 선언한 범위 외에도 이를 상속받는 subclass에서도 사용할 수 있다.

open class Parent {

    protected fun protectedMethod() = print("PROTECTED");
}

class Child : Parent() {
    
    fun test() {
        protectedMethod()
    }
}

internal

해당 internal을 선언한 모듈 내에서 사용할 수 있다.

모듈의 범위

  • IntelliJ IDEA Module
  • Maven, Gradle Project
  • A set of files compiled with one invocation of the <kotlinc> Ant task.

module_scope

// ModuleA.ExampleA
class ExampleA {

    internal val internalPrint = print("A")
}

// ModuleA.Print
fun printA() {
    ExampleA().internalPrint;
}

// ModuleB.Print
fun printA() {
    ExampleA().internalPrint;  //Cannot access 'internalPrint': it is internal in 'ExampleA'
}

public

모든 곳에서 사용 가능하며, 가시성 제어자의 default 값이다.

class ExampleClass {

    val publicField: Int = 0;
}

fun print() {
    print(ExampleClass().publicField)
}

참고문헌

Kotlin doc

Leave a comment