인프런에서 제공하고 있는 강의를 보고 정리한 글입니다.
자바와 코틀린의 가시성 제어
Java, Kotlin
Kotlin 에서는 패키지를 namespace 를 관리하기 위한 용도로만 사용되고, 가시성 제어에는 사용되지 않는다.
모듈 : 한번에 컴파일 되는 Kotlin 코드.
public
: Kotlin 의 기본 접근 지시어
코틀린 파일의 접근 제어
코틀린은 .kt 파일에 변수, 함수, 클래스를 바로 만들 수 있다.
public | 기본값. 어디서든 접근이 가능하다 |
---|---|
protected | 파일(최상단)에서는 사용이 불가능하다 |
internal | 같은 모듈에서만 접근 가능하다 |
private | 같은 파일 내에서만 접근 가능하다 |
다양한 구성요소의 접근 제어
생성자에 접근 지시어를 붙이려면, constructor를 반드시 써줘야한다.
open class Cat protected constructor () {}
자바에서 유틸성 코드를 만들 때, abstract class + private constructor 를 사용해서 인스턴스화를 막았었다. 코틀린에서는 파일 최상단에 바로 유틸 함수를 작성하면 편하다.
// 파일 최상단
fun isDirectoryPath(path: String): Boolean {
return path.endsWith("/")
}
class Car(
internal val name: String,
private var owner: String,
_price : Int
) {
var price = _price
private set // setter 에만 가시성을 부여할 수 있음
}
Java와 Kotlin을 함께 사용할 경우, 주의할 점
Internal은 바이트 코드상 public 이 된다. 때문에 Java 코드에서는 Kotlin 모듈의 internal 코드를 가져올 수 있다.
Kotlin의 protected와 Java의 protected는 다르다. Java는 같은 패키지의 Kotlin protected 멤버에 접근할 수 있다.
정리
- Kotlin에서 패키지는 namespace 관리용도이므로, protected 는 의미가 달라졌다.
- Kotlin에서는 default가 사라지고, 모듈간의 접근을 통제하는 internal이 새로 생겼다.
- 생성자에 접근 지시어를 붙일 때에는
constructor
를 명시적으로 써줘야한다. - 유틸성 함수를 만들 때에는 파일 최상단을 쓰면 편하다
- 프로퍼티의 custom setter에 접근 지시어를 붙일 수 있다.
- Java 에서 Kotlin 코드를 사용할 때 internal 과 protected 는 주의해야한다.
'[ Kotlin ]' 카테고리의 다른 글
코틀린에서 중첩 클래스를 다루는 방법 - 13강 (0) | 2024.08.28 |
---|---|
코틀린에서 object 키워드를 다루는 방법 - 12강 (1) | 2024.08.28 |
코틀린에서 상속을 다루는 방법 - 10강 (1) | 2024.08.28 |
코틀린에서 클래스를 다루는 방법 - 9강 (0) | 2024.08.23 |
코틀린에서 함수를 제어하는 방법 - 8강 (0) | 2024.08.23 |