자바를 알고 계신 분이라면 접근 제한자(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를 가질 수 없습니다.
'Kotlin' 카테고리의 다른 글
코틀린 중첩 클래스(Kotlin Nested and Inner Classes) (0) | 2019.11.26 |
---|---|
코틀린의 강력한 문법! 코틀린 익스텐션(Kotlin Extensions) (0) | 2019.11.21 |
코틀린 생성자(Kotlin Constructor) 제대로 이해하기 (2) | 2019.11.13 |
코틀린의 Property와 Field 파헤치기(var, val, getter & setter) (2) | 2019.11.13 |
코틀린(kotlin)과 불변성(immutability) (1) | 2019.10.14 |