가시성은 클래스 멤버마다 다르게 지정할 수 있습니다. 어떤 영역에서 쓰일 수 있는지 경절 할수 있고, 가기성을 사용해 구현과 관련한 세부 사항을 캡슐화함으로써 외부 코드로부터 구현 세부 사항을 격리시킬 수 있으므로, 가시성 지정은 클래스 정의 시 아주 중요한 부분입니다.
코틀린에서는 클래스 멤버의 가시성을 다음과 같이 변경자 키워드로 지정 할 수 있습니다.
- public(공개): 멤버를 어디서나 볼수 있습니다. 디폴트 가시성 명시적으로 사용안해도 됩니다.
- interbak(모듈 내부): 멤버를 멤버가 속한 클래스가 포함된 컴파일 모듈 내부에서만 볼수 있습니다.
- protected(보호): 멤버를 멤버가 속한 클래스와 멤버가 속한 클래스의 모든 하위 클래스 안에서 볼수 있습니다.
- private(비공개): 멤버를 멤버가 속한 클래스 내부에서만 볼수 있습니다.
class Example {
public val publicVal = 1
internal val internalVal = 2
protected val protectedVal = 3
private val privateVal = 4
private val privateToThisVal = 5
class SubClass : Example() {
// protected 멤버에 접근 가능
fun getProtectedVal() = protectedVal
}
fun printValues() {
println(publicVal) // 어디서든 접근 가능
println(internalVal) // 같은 모듈 내에서만 접근 가능
println(protectedVal) // 같은 패키지 내에서는 어디서든 접근 가능
// 다른 패키지에서는 상속한 서브 클래스에서만 접근 가능
println(privateVal) // 같은 클래스 내에서만 접근 가능
println(privateToThisVal) // 해당 인스턴스 내에서만 접근 가능
}
}
위 코드는 코틀린 클래스 내에 다섯 가지 가시성 등급을 지정한 예시입니다. public
, internal
, protected
, private
, private to this
등급의 멤버 변수를 선언하고, 각각에 대한 가시성 범위를 보여줍니다.
그리고 Example
클래스의 printValues()
함수는 해당 클래스 내에서 선언한 모든 멤버 변수에 접근하여 값을 출력하는 함수입니다.
이처럼 코틀린에서는 가시성 지정자를 사용하여 멤버 변수나 함수 등을 캡슐화할 수 있으며, 이를 통해 코드의 안정성과 가독성을 높일 수 있습니다.