들어가기 전에
우리가 어떤 것을 사용할 때 내부의 구조를 숨겨도 사용할 수 있는 형태가 있습니다. 필요하다면 내부 특성을 숨긴채 말이죠.
핵심 키워드
- 가시성(visibility)
- private
- public
- protected
- internal
학습하기
들어가기 전에
우리가 어떤 것을 사용할 때 내부의 구조를 숨겨도 사용할 수 있는 형태가 있습니다. 필요하다면 내부 특성을 숨긴채 말이죠.
핵심 키워드
학습하기
가시성 지시자
각 클래스나 메서드, 프로퍼티의 접근 범위를 가시성(visibility)이라고 합니다. 자동차의 예에서 민감하거나 불필요한 부분은 숨기고(은닉하고) 사용하기 위해 필요한 부분만 공개하듯이 각 클래스나 메서드, 프로퍼티에 가시성 지시자(visibility modifiers)에 의해 공개할 부분과 숨길 부분을 정해 줄 수 있습니다. 코틀린의 가시성 지시자는 다음과 같은 것들이 있습니다.
이 지시자들은 전역 변수, 함수, 클래스, 프로퍼티, 메서드, 인터페이스 등에 붙여서 사용할 수 있습니다. 가시성 지시자를 선언하지 않으면 public이 기본값입니다.
private class PrivateClass {
private var i = 1
private fun privateFunc() {
i += 1 // 접근 허용
}
fun access() {
privateFunc() // 접근 허용
}
}
class OtherClass {
val opc = PrivateClass() // 불가 - 프로퍼티 opc는 private이 되야 함
fun test() {
val pc = PrivateClass() // 생성 가능
}
}
fun main() {
val pc = PrivateClass() // 생성 가능
pc.i // 접근 불가
pc.privateFunc() // 접근 불가
}
fun TopFunction() {
val tpc = PrivateClass() // 객체 생성 가능
}
이 예제에서 PrivateClass는 private으로 선언되어 있으므로 다른 파일에서 접근할 수 없습니다. 같은 파일에서는 PrivateClass의 객체를 생성할 수 있습니다. 만일 다른 클래스에서 프로퍼티로서 PrivateClass의 객체를 지정하려면 똑같이 private으로 선언해야 합니다.
http://www.yes24.com
comment
private는 외부에서 접근할 수 없는데, 다른 클래스의 메소드에서나 탑레벨에서 객체 생성이 가능한 이유는 무엇인가요?