반응형
가시성 수정자는 클래스, 함수, 프로퍼티, 그리고 생성자의 접근을 제어하기 위해 사용됩니다.
클래스, 객체, 인터페이스, 생성자, 함수, 그리고 속성과 세터는 가시성 수정자를 가질 수 있습니다. 게터는 항상 속성과 동일한 가시성을 갖습니다. Kotlin에는 private, protected, internal, public의 네 가지 가시성 수정자가 있습니다.
가시성 수정자 | 설명 |
private | 선언된 클래스나 파일 내부에서만 접근 가능합니다. |
protected | 선언된 클래스 및 하위 클래스에서만 접근 가능합니다. private 하위 클래스에서도 표시될 수 있습니다. |
internal | 같은 모듈 내에서만 접근 가능합니다. 모듈은 함께 컴파일된 kotlin 파일 세트이며 Intellij IDEA 모듈, Maven 프로젝트 등을 의미합니다. |
public | 모든 곳에서 접근 가능하며, 가시성 수정자를 명시하지 않으면 기본적으로 public입니다. public으로 선언된 클래스를 보는 모든 클라이언트는 해당 클래스의 public 멤버를 볼 수 있습니다. |
패키지 내부 최상위 수준에서 함수, 속성, 클래스, 객체 및 인터페이스에 직접 선언할 수 있습니다.
- 가시성 수정자를 사용하지 않으면 public이 기본적으로 적용되며, 이는 모든 곳에서 표시된다는 것을 의미합니다.
- private으로 선언하면 해당 선언이 포함된 파일 내에서만 표시됩니다.
- internal로 선언하면 같은 모듈 내의 모든 곳에서 표시됩니다.
- protected는 최상위 수준에서 선언할 수 없습니다.
// file name: example.kt
package foo
private fun foo() { ... } // visible inside example.kt
public var bar: Int = 5 // property is visible everywhere
private set // setter is visible only in example.kt
internal val baz = 6 // visible inside the same module
protected 또는 internal 멤버의 가시성을 명시적으로 지정하지 않으면, 재정의하는 멤버도 원본과 동일한 가시성을 갖게 됩니다.
open class Outer {
private val a = 1
protected open val b = 2
internal open val c = 3
val d = 4 // public by default
protected class Nested {
public val e: Int = 5
}
}
class Subclass : Outer() {
// a is not visible
// b, c and d are visible
// Nested and e are visible
override val b = 5 // 'b' is protected
override val c = 7 // 'c' is internal
}
class Unrelated(o: Outer) {
// o.a, o.b are not visible
// o.c and o.d are visible (same module)
// Outer.Nested is not visible, and Nested::e is not visible either
}
클래스의 기본 생성자의 가시성을 지정하려면 constructor 키워드를 추가해야 합니다.
class C private constructor(a: Int) { ... }
위의 코드는 private 가시성 수정자를 이용해서 constructor를 선언하였습니다.
기본적으로 모든 생성자는 public이며, 이는 클래스가 보이는 모든 곳에서 볼 수 있다는 의미입니다. internal 클래스의 생성자는 같은 모듈에서만 볼 수 있습니다. sealed class의 경우 protected가 기본 생성자의 가시성 수정자입니다.
자바와 같이 지역적으로 선언된 변수, 함수, 클래스는 가시성 수정자를 가질 수 없습니다.
https://kotlinlang.org/docs/visibility-modifiers.html#packages
반응형
'[개발] 언어 > Kotlin' 카테고리의 다른 글
[kotlin] class 에 대해서 알아보기 (2) | 2024.12.29 |
---|---|
[kotlin] class/file 타입 알아보기 (0) | 2024.12.29 |
[kotlin] print 문 사용하기 (1) | 2024.12.28 |
코틀린 소개 (0) | 2024.07.29 |