[kotlin] 코틀린에서 자동으로 생성되는 getter와 setter의 접근 제한자는 어떻게 결정되나요?

예를 들어, 아래와 같이 비공개 접근 제한자를 갖는 프로퍼티를 선언할 수 있습니다.

class Example {
    var privateProperty: Int = 0
        private set // setter is private
}

위의 예제에서 privateProperty는 외부에서 접근할 수 없지만, 해당 프로퍼티에 대한 getter와 setter가 자동으로 생성될 때 이 둘의 접근 제한자는 기본적으로 private으로 설정됩니다.

그러나 명시적으로 getter와 setter의 접근 제한자를 설정할 수도 있습니다. 이를 위해서는 아래와 같이 getter와 setter를 직접 정의하고, 해당 멤버에 대한 접근 제한자를 명시적으로 지정하면 됩니다.

class Example {
    var customProperty: Int = 0
        private set // setter is private

    // custom getter with public access
    val customGetterProperty: Int
        get() = customProperty
        public set // setter is public
}

위의 예시에서 customProperty의 getter는 자동으로 public 접근 제한자를 갖고 있지만, setter는 명시적으로 private로 지정되어 있습니다. 반면 customGetterProperty는 getter와 setter가 각각 명시적으로 public으로 지정되어 있습니다.

자동 생성되는 getter와 setter의 접근 제한자를 이해하려면, 프로퍼티의 접근 제한자에 대한 이해가 필요합니다.