안드로이드 세계

[Kotlin] 접근 제한자(public, private, internal, protected) 본문

안드로이드(Android)/이론

[Kotlin] 접근 제한자(public, private, internal, protected)

리안94 2023. 4. 10. 20:33

 

기본적으로 코틀린은 모든 클래스, 변수들은 public으로 선언됩니다.

// 두가지는 동일한 내용
public val a = "이것"
val a = "이것"

public class A{
	...
}

class A{
	...
}

접근 제한자에 대한 설명은 아래와 같습니다.

 


 

  • public : Top Level 선언이 가능하며, 모든곳에서 접근이 가능합니다.

 

  • private : Top Level 선언이 가능하며, 같은 코틀린 파일내에서만 접근 가능합니다.

 

  • internal : Top Level 선언이 가능하며, 같은 모듈내에서만 접근 가능합니다. 따라서 해당 접근자를 통하여 모듈화를 쉽게 할 수 있습니다.

접근 시, 변수 또는 메소드는  internal 또는 private 접근 제한자를 가져야합니다.

    (모듈 내에서만 접근 가능해야하는데, 외부에서 접근이 가능해진다면 모듈화가 깨지기 때문입니다.)

internal class Utils{
    fun print() = print("A")
}

class B{
    val b = Utils() // 에러발생
    internal val c = Utils()
    private val d = Utils()
}

 

  • protected : Top Level에서 선언이 불가능하며, 어떤 클래스 내 또는 해당 클래스를 상속받은 경우에 접근가능합니다.

※ Top-Level에서 protected 접근 제한자를 사용하면 아래와 같은 에러가 발생합니다.

protected class C{ // Error
    ...
}

Top-Level에서 protected 사용시 에러

 

※ 아래와 같이 상속받지 못한 경우는 에러가 발생합니다.

open class A{
    protected val b = "BB"
}

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

class C{
    val a = b // Error
}
Comments