티스토리 뷰

접근 제한자는 객체가 공개 되어야 하는 범위를 정해주는 역할을 한다.
이번 포스팅에서는 코틀린에서 접근 제한자를 다루는 방법에 대해서 알아보자!


1. Java와 Kotlin의 가시성 제어
2. Kotlin 파일의 접근 제한자
3. 다양한 구성요소의 접근 제한자
4. Java와 Kotlin을 함께 사용할 경우 주의할 점


Java와 Kotlin의 가시성 제어

우선 자바의 접근 제한자는 아래와 같다.

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

다음은 코틀린에서의 접근 제한자이다.

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

자바에서 protected는 같은 패키지에서도 접근이 가능했지만, 코틀린에서 패키지는 namespace를 관리하기 위한 용도로만 사용되기 때문에, 가시성 제어에는 사용하지 않는다. 또한, default가 사라지고, internal이라는 새로운 접근 제한자가 생겼다.


자바의 기본 접근 제한자는 default지만, 코틀린의 기본 접근 제한자는 public이다.


Kotlin 파일의 접근 제한자

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

val a = 3

fun add(a: Int, b: Int) = a + b

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

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

클래스, 생성자, 프로퍼티에 붙이는 접근 지시어도 기존과 동일하다.

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

생성자도 가시성 범위는 동일하다.
단! 생성자에 접근 지시어를 붙이기 위해선, construtor를 써주어야 한다.

class Bus internal constructor(
    val price: Int
)

프로퍼티의 가시성 범위도 동일하다.

class Car (
    internal val name: String,
    _price: Int
){
    var price = _price
      private set
}

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

internal은 바이트 코드 상 public이 되기 때문에, 자바 코드에서 코틀린 모듈의 internal 코드를 가져올 수 있다.


코틀린의 protected와 자바의 protected는 다르기 때문에, 자바에서 같은 패키지의 코틀린 protected멤버에 접근할 수 있다.

'Kotlin' 카테고리의 다른 글

[Kotlin] 클래스  (0) 2022.06.17
[Kotlin] object 키워드  (0) 2022.06.14
[Kotlin] 예외를 처리하는 방법  (0) 2022.06.02
[Kotlin] 반복문  (0) 2022.06.01
[Kotlin] null을 대하는 자세  (0) 2022.05.28
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함