반응형

자바를 알고 계신 분이라면 접근 제한자(Access Modifier)라는 표현이 어색하지 않으실 겁니다.

코틀린에서는 비슷하지만 다른 용어인 Visibility Modifier로 사용하고 있는데요, '가시성 수정자'라는 표현보다는 접근 제한자가 조금 더 친숙한 표현인 것 같아 제목에서는 '접근 제한자'라고 표현했습니다.

 

Visibility Modifier란?

Visibility Modifier는 한 마디로 "누구에게 공개할 것인가?" 정도로 이해하시면 되겠습니다.

코틀린에서 접근 제한자를 가질 수 있는 요소로는 class, object, interface, constructor, function, property 등이 있습니다.

 

종류

코틀린은 자바와 비슷하지만 다르기 때문에 정확하게 구분해주셔야 합니다.

코틀린의 접근 제한자는 4가지가 있으며 각각 public, private, protected, internal 입니다.

 

조금 더 자세히 살펴보겠습니다.

 

public 어디에서나 접근할 수 있습니다.
코틀린의 기본 접근 제한자입니다.
private 해당 파일 또는 클래스 내에서만 접근 가능합니다.
protected private과 같지만 같은 파일이 아니더라도 자식 클래스에서는 접근이 가능합니다.
top-level에서는 선언할 수 없습니다.
internal 같은 모듈 내에서 어디서든 접근 가능합니다.

 

자바와의 차이점이라면 자바에서는 접근 제한자를 아무것도 붙이지 않으면 default(package-private) 였습니다.

그러나 코틀린에서는 아무것도 붙이지 않으면 public 입니다.

 

눈치채셨나요? 코틀린에서는 default(package-private) 접근 제한자가 없습니다.

비슷하지만 조금 다른 대체 방안으로 internal이 등장했는데요, 같은 모듈이라는 말이 낯설 수 있습니다.

 

코틀린 공식 문서에 따르면 internal이 말하는 '같은 모듈'은 아래 상황을 뜻합니다.

  • IntelliJ IDEA Module
  • Maven Project
  • Gradle Source Set(with the exception that the test source set can access the internal declarations of main)
  • a set of files compiled with one invocation of the <kotlinc> Ant task

 

 

말이 좀 어렵나요? 어려우신 분들은 그냥 "같은 프로젝트" 내에서는 internal 제한자에 대해 접근 가능하다고 보면 되겠습니다.

 

참고로 로컬 변수, 로컬 함수, 로컬 클래스는 Visibility Modifier를 가질 수 없습니다.

반응형
반응형