// file name: example.kt
package foo
fun baz() { ... }
class Bar { ... }
코틀린에서의 접근 제한자(Visibility Modifiers)는 private, protected, internal, public 을 제공한다.
위 코드와 같은 함수나 클래스 앞에 아무것도 붙이지 않으면 자바에서는 default로 지정되지만 기본 public으로 지정된다.
// file name: example.kt
package foo
private fun foo() { ... } // example.kt 에서만 접근가능
public var bar: Int = 5 // 어디에서나 접근가능한 프로퍼티
private set // example.kt 에서만 쓰기(set) 가능
internal val baz = 6 // 같은 모듈안에서만 접근가능
자바에서 사용되는 private, protected, public 과 코틀린에서 같은 의미로 사용된다.
하지만 internal은 자바에서 default(같은 패키지내에서만 접근가능)과 다르게
새로운 internal은 같은 모듈안에서만 사용 가능하다.
모듈은 아래와 같이 정의하고 있다.
- an IntelliJ IDEA module;
- a Maven project;
- a 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.
a Gradle source set 이라고 되어 있어서 다른 source set에서는 internal로 선언된 것들을 접근 못하는 줄 알았지만 접근이 가능하였다.
안드로이드에서는 멀티 모듈을 사용할 때 서로 다른 모듈에서 internal로 선언된 것들을 접근하지 못하는 것 같다.
멀티 모듈 프로젝트가 아니면 안드로이드의 app폴더 안에서는 internal로 접근이 가능하다.
실제로 코틀린으로 internal이나 public으로 작성한 class들은 자바로 변환된 바이트코드를 보면
똑같이 public 접근제어자를 가지는 것을 볼 수 있었다.
참고: https://kotlinlang.org/docs/reference/visibility-modifiers.html#modules
'모바일 프로그래밍 > 안드로이드' 카테고리의 다른 글
java.lang.IllegalStateException: Fragment already added: DialogFragment (0) | 2019.06.12 |
---|---|
RecyclerView의 scrollToPosition나 smoothScrollToPosition 사용 시 Item사이의 margin이 있는 경우 (0) | 2019.05.10 |
Dagger2에서 발생하는 java.lang.IllegalArgumentException: No injector factory bound for Class 에러 (0) | 2019.04.18 |
안드로이드 간단히 View 움직이게 하기 (Drag and Drop) (0) | 2019.04.12 |
ConstraintLayout의 개념과 기본 사용법 (3) | 2018.04.23 |