본문 바로가기
[개발] 언어/Kotlin

[kotlin] Visibility modifiers (가시성 수정자)

by Devsong26 2025. 1. 2.
반응형

가시성 수정자는 클래스, 함수, 프로퍼티, 그리고 생성자의 접근을 제어하기 위해 사용됩니다.

 

클래스, 객체, 인터페이스, 생성자, 함수, 그리고 속성과 세터는 가시성 수정자를 가질 수 있습니다. 게터는 항상 속성과 동일한 가시성을 갖습니다. Kotlin에는 private, protected, internal, public의 네 가지 가시성 수정자가 있습니다. 

 

가시성 수정자 설명
private 선언된 클래스나 파일 내부에서만 접근 가능합니다.
protected 선언된 클래스 및 하위 클래스에서만 접근 가능합니다. private 하위 클래스에서도 표시될 수 있습니다.
internal 같은 모듈 내에서만 접근 가능합니다.
모듈은 함께 컴파일된 kotlin 파일 세트이며 Intellij IDEA 모듈, Maven 프로젝트 등을 의미합니다.
public 모든 곳에서 접근 가능하며, 가시성 수정자를 명시하지 않으면 기본적으로 public입니다.
public으로 선언된 클래스를 보는 모든 클라이언트는 해당 클래스의 public 멤버를 볼 수 있습니다.

 

 

패키지 내부 최상위 수준에서 함수, 속성, 클래스, 객체 및 인터페이스에 직접 선언할 수 있습니다.

  • 가시성 수정자를 사용하지 않으면 public이 기본적으로 적용되며, 이는 모든 곳에서 표시된다는 것을 의미합니다.
  • private으로 선언하면 해당 선언이 포함된 파일 내에서만 표시됩니다.
  • internal로 선언하면 같은 모듈 내의 모든 곳에서 표시됩니다.
  • protected는 최상위 수준에서 선언할 수 없습니다.
// file name: example.kt
package foo

private fun foo() { ... } // visible inside example.kt

public var bar: Int = 5 // property is visible everywhere
    private set         // setter is visible only in example.kt

internal val baz = 6    // visible inside the same module

 

protected 또는 internal 멤버의 가시성을 명시적으로 지정하지 않으면, 재정의하는 멤버도 원본과 동일한 가시성을 갖게 됩니다.

 

open class Outer {
    private val a = 1
    protected open val b = 2
    internal open val c = 3
    val d = 4  // public by default

    protected class Nested {
        public val e: Int = 5
    }
}

class Subclass : Outer() {
    // a is not visible
    // b, c and d are visible
    // Nested and e are visible

    override val b = 5   // 'b' is protected
    override val c = 7   // 'c' is internal
}

class Unrelated(o: Outer) {
    // o.a, o.b are not visible
    // o.c and o.d are visible (same module)
    // Outer.Nested is not visible, and Nested::e is not visible either
}

 

 

클래스의 기본 생성자의 가시성을 지정하려면 constructor 키워드를 추가해야 합니다.

class C private constructor(a: Int) { ... }

 

 

위의 코드는 private 가시성 수정자를 이용해서 constructor를 선언하였습니다.

 

기본적으로 모든 생성자는 public이며, 이는 클래스가 보이는 모든 곳에서 볼 수 있다는 의미입니다. internal 클래스의 생성자는 같은 모듈에서만 볼 수 있습니다. sealed class의 경우 protected가 기본 생성자의 가시성 수정자입니다.

 

자바와 같이 지역적으로 선언된 변수, 함수, 클래스는 가시성 수정자를 가질 수 없습니다.

 

 


 

https://kotlinlang.org/docs/visibility-modifiers.html#packages

반응형

'[개발] 언어 > Kotlin' 카테고리의 다른 글

[kotlin] class 에 대해서 알아보기  (2) 2024.12.29
[kotlin] class/file 타입 알아보기  (0) 2024.12.29
[kotlin] print 문 사용하기  (1) 2024.12.28
코틀린 소개  (0) 2024.07.29