Image
Kotlin/Modifier

Kotlin 최상위 선언에서 가시성 변경자 : public, internal, private

목적

  • 최상위 선언의 가시성 변경자에 대해 이해한다.
  • internal 가시성 변경자에 대해 이해한다.

 

최상위 선언에서의 가시성 변경자

최상위 선언에서는 3가지의 가시성 변경자를 쓸 수 있다.

  • public : 기본 가시성 변경자이다. 모든 곳에서 접근 가능하다.
  • internal : 같은 모듈 안에서만 접근 가능하다. Kotlin의 특별한 접근자로, 이 접근자를 통해 모듈화가 수월해진다.
  • private : 같은 파일(.kt)안에서만 접근 가능하다. 최상위 선언에는 여러 class와 메서드(fun), 변수(val, var)이 들어갈 수 있는데, private으로 선언되었다면 같은 파일 안에서는 언제나 접근 가능하다.

아래에서 internal과 private 접근 제한자에 대해 살펴보자

 

 

Internal 접근 제한자

internal 가시성 변경자는 같은 모듈 내부에서만 접근 가능하다. 또한 접근 시, 접근하는 변수 혹은 메서드는 internal 가시성을 가져야 한다. 모듈 내부에서만 접근 가능한 가시성이 모듈 외부에서 접근 가능해진다면 모듈화가 깨지기 때문이다.

 

아래와 같이 mylibrary라는 android library 모듈이 만들어졌다고 해보자.   

그림1. mylibrary 모듈 

LibraryUtil class의 최상위 선언에 대한 가시성을 internal로 두었다.

package com.devcho.mylibrary

internal class LibraryUtil {
    fun printAA() = println("AA")
}

코드1. LibraryUtil internal class

 

모듈 내부에서 접근

이때 이 LibraryUtil class에 접근하기 위해서 해당 class를 인스턴스화 하는 변수는 아래와 같이 internal 가시성 제한자를 가져야 한다. 

package com.devcho.mylibrary

class Library {
    internal val util = LibraryUtil()
}

코드2. LibraryUtil을 인스턴스화하는 util 변수

 

그렇지 않다면 아래 그림2와 같은 문제가 생긴다. public 가시성을 가진 val이 internal(모듈 수준) 가시성을 가진 클래스에 접근이 가능해진다면 모듈 가시성이 깨지게 된다. Kotlin에서는 이를 허용하지 않는다. 

그림2. internal 가시성 변경자를 가진 최상위 선언에 대한 접근 오류

따라서 internal 가시성에 접근하기 위해서는 internal 보다 낮은 internal 혹은 private 수준의 가시성을 사용해야 한다. protected나 public 수준의 가시성으로 접근은 불가능하다.

그림3. internal 가시성을 변경자를 가진 최상위 선언에 대한 접근

 

접근 범위

internal 클래스의 접근 범위인 모듈 내부는 모듈을 만들 때 생성되는 코드의 범위이다. 모듈은 아래의 메뉴를 통해 생성 가능하다.

 

그림4. module 생성

즉, mylibrary라는 모듈을 만들었을 때 모듈 내부와 외부는 그림5와 같아진다.

그림5. 모듈 내부와 모듈 외부

 

최상위 선언이 무엇인지 모른다면 아래 글을 참조하자.
 

Kotlin, Java의 최상위 선언과 차이점

목표 Java와 Kotlin의 최상위 선언의 차이에 대해 이해한다. 최상위 선언 최상위 선언이란 파일 최상위에 선언되는 클래스, 메서드, 변수를 뜻한다. Java의 최상위 선언  Java에서는 모든 코드가 클래

kotlinworld.com

 

private 접근 제한자

최상위 선언에서의 private 접근 제한자는 .kt 파일 내부에서 접근이 가능함을 뜻한다. Java에서는 하나의 파일에 하나의 class만 선언이 가능했지만 Kotlin에서는 하나의 파일(.kt)에 여러 최상위 선언이 가능하다.

 

이에 대한 것을 반영하여 Kotlin에서는 파일을 캡슐화 하기 위해 private 접근자가 쓰인다. 이를 파일 내부 가시성이라 부른다.

 

반응형

 

이 글의 저작권은 '조세영의 Kotlin World' 에 있습니다. 글, 이미지 무단 재배포 및 변경을 금지합니다.

 

 

Kotlin, Android, Spring 사용자 오픈 카톡

오셔서 궁금한 점을 질문해보세요!
비밀번호 : kotlin22

open.kakao.com