포스트

Kotlin의 접근 제어 다루기


Java와 Kotlin의 가시성 제어


Java의 접근 제어

  • public : 모든 곳에서 접근 가능
  • protected : 같은 패키지, 하위 클래스만 접근 가능
  • default : 같은 패키지만 접근 가능
  • private : 선언된 클래스 내에서만 접근 가능

Kotlin의 접근 제어

  • public : 모든 곳에서 접근 가능
  • protected : 선언된 클래스, 하위 클래스만 접근 가능
    • Kotlin은 기본적으로 패키지를 namespace를 관리하기 위한 용도로만 사용
    • 가시성 제어는 사용하지 않음
  • internal : 같은 모듈에서만 접근 가능
    • 모듈 : 한번에 컴파일 되는 Kotlin Code
  • private : 선언된 클래스 내에서만 접근 가능

접근 제어를 사용하지 않는 경우

  • Java : default
  • Kotlin : public




Kotlin 파일의 접근 제어


Kotlin은 .kt 파일에 변수, 함수, 클래스 여러개를 바로 만들 수 있다.


.kt 파일의 접근 제어

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




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


클래스, 생성자, 프로퍼티 접근 제어

  • public : 모든 곳에서 접근 가능
  • protected : 선언된 클래스, 하위 클래스만 접근 가능
  • internal : 같은 모듈에서만 접근 가능
  • private : 선언된 클래스내에서만 접근 가능

생성자에 접근 제어를 하려면 constructor를 써주어야 한다.

예시

1
2
3
class Store internal constructor(
    val price: Int
)


프로퍼티 가시성 범위도 동일

getter, setter 한 번에 접근 지시어를 정하는 예시

1
2
3
4
5
6
7
8
9
class Car(
    internal val name: String,
    _price: Int
){
    // getter는 public으로 두고
    // setter만 private로 세팅
    var price = _price
      private set
}




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

  • internal은 바이트 코드 상으로 public이 된다.
  • Java 코드에서 Kotlin 모듈의 internal 코드를 가져올 수 있다.

Kotlin의 protected와 Java의 protected의 의미가 다르다.

  • Java는 같은 패키지의 Kotlin protected 멤버에 접근할 수 있다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.