본문 바로가기
Java & Kotlin/Kotlin

[Kotlin] 접근제어를 다루는 방법

by heekng 2022. 7. 6.
반응형

접근제어를 다루는 방법

자바와 코틀린의 가시성 제어

  • 자바의 접근 제어
    • public: 모든 곳에서 접근 가능
    • protected: 같은 패키지 또는 하위 클래스에서만 접근 가능
    • default: 같은 패키지에서만 접근 가능
    • private: 선언된 클래스 내에서만 접근 가능
  • 코틀린의 접근 제어
    • public: 모든 곳에서 접근 가능
    • protected: 선언된 클래스 또는 하위 클래스에서만 접근 가능
    • internal: 같은 모듈에서만 접근 가능
    • private: 선언된 클래스 내에서만 접근 가능
  • 코틀린에서는 패키지를 namespace를 관리하기 위한 용도로만 사용한다. 가시성 제어에는 사용되지 않는다.
  • 모듈: 한 번에 컴파일 되는 kotlin 코드
  • 자바의 기본 접근 지시어는 default이지만, 코틀린은 public 이다.
  • 코틀린은 .kt 파일에 변수, 함수, 클래스 여러개를 바로 만들 수 있다.

코틀린 파일의 접근 제어

  • public: 기본값, 어디든 접근 가능
  • protected: 파일(최상단)에는 사용 불가
  • internal: 같은 모듈에서만 접근 가능
  • private: 같은 파일 내에서만 접근 가능

다양한 구성요소의 접근 제어

  • 클래스
    • public: 모든 곳에서 접근 가능
    • protected: 선언된 클래스 또는 하위 클래스에서만 접근 가능
    • internal: 같은 모듈에서만 접근 가능
    • private: 선언된 클래스 내에서만 접근 가능
  • 생성자
    • 동일하나, constructor을 명시적으로 사용해야 한다.
    • Java에서 유틸성 코드를 만들 때 abstract class + private Contructor을 사용해서 인스턴스화를 막았다.
    • 코틀린에서도 비슷하지만 팡리 최상단에 바로 유틸함수를 만들면 편리하다.

  • 프로퍼티
class Car(
        internal var name: String,
        private var owner: String,
        _price: Int
) {
    var price = _price
        private set
}
  • val 또는 var 앞에 internal을 사용해 getter, setter 한번에 접근 지시어를 정하거나.
  • setter에만 가시성을 부여할 수 있다.

Java와 Kotlin을 함께 사용할 경우 주의할 점

  • Internal은 바이트 코드 상 public이 된다.
    • 때문에 Java 코드에서는 Kotlin 모듈의 internal 코드를 가져올 수 있다.
  • Kotlin의 protected와 Java의 protected는 다르다.
    • Java는 같은 패키지의 Kotlin protected 멤버에 접근할 수 있다.
반응형