[Kotlin Docs] 가시성 제어자
코틀린 공식 사이트의 문서를 번역하고 공부한 내용입니다.
글 내용에 오,의역이 존재할 수 있고 공부하면서 잘못알고 있는 개념이 존재할 수 있습니다!
가시성 제어자
코틀린에서 클래스, Object
, 인터페이스, 생성자, 함수, 프로퍼티 및 접근자는 모두 가시성 제어자를 가질 수 있다. 접근자 중 getter는 항상 프로퍼티와 동일한 가시성을 갖는다.
코틀린에는 private
, protected
, internal
, public
의 4가지 가시성 제어자가 존재한다. 기본 가시성은 public
이다.
자바의 기본 가시성은 패키지 전용이다. 따라서 멤버를 공개 멤버로 정의하고 싶으면 명시적으로
public
을 붙여줘야 했다.
코틀린의 클래스 멤버(지역 선언이 아닌)는 기본 가시성이public
이다. 또한 코틀린에는 자바의 기본 가시성처럼 패키지 내부에 해당하는 가시성이 없다.
최상위 선언
코틀린에서는 클래스, Object
, 인터페이스와 더불어 함수와 변수도 최상위 수준에 선언할 수 있었다.
- 최상위 선언의 기본 가시성은
public
이다. private
: 해당 소스 파일내에서만 접근 가능하다.internal
: 동일 모듈 내에서만 접근 가능하다.protected
: 최상위 선언의 접근 제어자로 사용할 수 없다.
왜? protected는 클래스 계층 구조에 대한 가시성을 설정하는데, 최상위 선언은 이 클래스 계층 구조에 들어갈 수 없다.
접근 가능한 다른 패키지에 선언된 최상위 선언을 사용하기 위해선 import
해야 한다.
클래스
클래스 멤버 가시성
private
: 클래스 내부에서만 접근 가능하다. 클래스의 다른 멤버에서도 접근 가능하다.
protected
: private
와 동일한 가시성에 추가로 멤버가 속한 클래스의 모든 하위 클래스에서도 접근 가능하다.
internal
: 해당 멤버가 속한 클래스가 포함된 컴파일 모듈 내부에서 접근 가능하다.
public
: 공개 멤버이다.
private
: 클래스 내부에서만 접근 가능하다. 클래스의 다른 멤버에서도 접근 가능하다.protected
: private
와 동일한 가시성에 추가로 멤버가 속한 클래스의 모든 하위 클래스에서도 접근 가능하다.internal
: 해당 멤버가 속한 클래스가 포함된 컴파일 모듈 내부에서 접근 가능하다.public
: 공개 멤버이다.코틀린에서는 inner
클래스의 private
멤버에 외부 클래스에서 접근할 수 없다.
open class Outer {
private val a = 1
protected open val b = 2
internal open val c = 3
val d = 4 // public
protected class Nested {
public val e: Int = 5
}
}
class Subclass : Outer() {
// b, c, d, Nested, e 접근 가능
// a 접근 불가능
override val b = 5 // protected
override val c = 7 // internal
}
class Unrelated(o: Outer) {
// o.c, o.d 접근 가능 -> 동일 모듈
// o.a, o.b 접근 불가능, Outer.Nested, Nested::e 접근 불가능
}
protected
또는 internal
멤버를 재정의하고 가시성 제어자를 명시적으로 지정하지 않으면 상위 구현과 같은 가시성을 갖는다.
생성자
클래스의 기본 생성자에 가시성을 명시적으로 지정하려는 경우 constructor
키워드 앞에 가시성 제어자를 붙여야 한다. 모든 기본 생성자는 public
이다.
클래스에 접근 가능한 모든 곳에서 생성자를 호출할 수 있기 때문에 생성자는 클래스의 가시성을 따라가는 것이 기본적이다.
지역 선언
지역 변수, 지역 함수, 지역 클래스는 가시성 제어자를 가질 수 없다.
모듈
internal
가시성 제어자는 동일한 모듈 내에서 접근 가능함을 의미한다.
모듈: 함께 컴파일된 코틀린 소스 파일의 집합
Author And Source
이 문제에 관하여([Kotlin Docs] 가시성 제어자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dev_suho/Kotlin-Docs-가시성-제어자저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)