Skip to content

internal의 범위는 어디까지일까?

이진혁 edited this page Jun 9, 2021 · 3 revisions

개요

코틀린에서는 public(default), internal, protected, private이라는 접근 제어 지시자를 제공합니다.
internal을 제외한 모든 접근 제어 지시자는 익숙합니다.
자바에서 제공하는 package-private을 대신한 것이라고도 생각했지만,
코틀린에서의 패키지는 클래스를 나누는 네임스페이스의 역할만 하기 때문에
package-private이 존재할 수 없습니다.

internal은 모듈 단위로 접근을 제어하는 것으로 module-private이라고 부를 수도 있습니다.
그러면 이 모듈의 범위는 어디까지일까요?

실험해보기

모듈이라고 하면 자바 9에 추가된 모듈을 떠올릴 수도 있지만 가장 쉽게 떠오르는 것은
Gradle(그레이들) 프로젝트의 서브 프로젝트입니다.

그레이들을 이용하면 멀티 프로젝트를 구성하여 여러 프로젝트를 하나의 프로젝트 아래에 둘 수 있습니다.
이때 각 프로젝트를 모듈이라고 칭하는데 여기서 internal로 선언하면 모듈끼리 접근이 안 될 것이라고 생각했습니다.

a-project
    ㄴ b-project
        ㄴ src
            ㄴ com
                ㄴ j
                    ㄴ research
                        ㄴ B.kt
        ㄴ build.gradle.kts
    ㄴ c-project
        ㄴ src
            ㄴ com
                ㄴ j
                    ㄴ research
                        ㄴ C.kt
        ㄴ build.gradle.kts
    ㄴ build.gradle.kts

여기서 B 클래스의