[코틀린인액션] 가시성 변경자 및 접근 제어

기본적인 가시성 변경자와 접근의 제어

  • 가시성 변경자는 클래스 외부에서의 접근을 제어한다.
  • 클래스의 구현에 대한 접근을 제한함.
    • 외부 코드가 클래스 내부 구현에 의존하지 않음.
  • public, protected, private 변경자가 존재하며,
    • 기본은 public
    • 아무런 변경자가 없으면 기본 선언은 공개
  • 자바의 기본 가시성 패키지 전용은 코틀린에 존재하지 않음
    • 패키지를 네임스페이스 위한 용도로만 사용
    • 패키지에 가시성 제어 적용 X

코틀린의 internal 가시성 변경자

  • 패키지 전용 가시성에 대한 대안
    • 코틀린은 internal 가시성 변경자 도입
      • internal
        • 모듈 내부에서만 볼 수 있다
        • 의 의미이다.
  • 모듈은 한 번에 한꺼번에 컴파일되는 코틀린 파일들을 의미
    • 이클립스 인텔리제이 메이븐 등의 프로젝트가 모듈이 될 수 있다.
  • 모듈 내부 가시성은 모듈의 구현에 대해 진정한 캡슐화 제공 하는 장점이 있음
internal open class Example {
    // 이 클래스는 같은 모듈 안에서만 볼 수 있습니다.
}
💡
자바에서는 기본적으로 모듈 레벨의 가시성 변경자는 없다.

최상위 선언에 대한 private 가시성 변경자

  • 최상위 선언에 대해 private 을 허용한다.
    • 클래스, 함수, 프로퍼티 등이 포함된다.
private fun exampleFunction() {
    // 이 함수는 같은 파일 안에서만 볼 수 있습니다.
}
💡
자바에서는 기본적으로 최상위 레벨에서의 private 선언을 허용하지 않는다.

코틀린의 protected 가시성 변경자

  • 코틀린의 protected 가시성 변경자는 오직 어떤 클래스나 해당하는 클래스를 상속한 클래스 안에서만 보인다.
  • 클래스를 확장한 함수는 해당 클래스의 private 이나 protected 멤버에 접근할 수 없다.
    open class Example {
        protected fun exampleFunction() {
            // 이 함수는 이 클래스나 이 클래스를 상속한 클래스 안에서만 볼 수 있습니다.
        }
    }
💡
자바에서는 같은 패키지 + 상속된 클래스 레벨에서 접근이 가능

코틀린에서는 해당 클래스나 그 클래스를 상속한 클래스 안에서만 보인다.

파일단위의 캡슐화가 가능해졌다는 점

internal 변경자로 모듈 내부에서만 접근이 가능하도록 모듈의 독립성을 유지할 수 있다는 점이 좋다고 생각한다.


Uploaded by N2T