자바와 코틀린의 가시성 제어
protected
자바에서 protected는 같은 패키지 또는 하위 클래스에서만 접근이 가능했다.
하지만 코틀린에서는 선언된 클래스 또는 하위 클래스에서만 접근 가능하다고 한다.
코틀린에서는 패키지를 namespace를 관리하기 위한 용도로만 사용하기에 가시성 제어로는 사용하지 않기에 같은 패키지에서도 사용할 수 없다.
default
default는 자바에서 같은 패키지에서만 접근이 가능한 접근 지시어였다.
마찬가지로 코틀린에서는 default라는 지시어가 사라지고 internal이라는 같은 모듈에서만 접근이 가능한 지시어가 추가되었다.
한 번에 컴파일 되는 코틀린 코드를 모듈이라고 할 수 있다.
코틀린 파일의 접근 제어
코틀린 파일에서 protected는 사용이 불가능하다.
이는 클래스에서만 작동하는 지시어이기 때문에 파일에서는 적용되지 않는다.
private은 같은 파일에서만 접근 가능하게 하는 지시어이다.
다양한 구성요소의 접근제어
생성자에 접근 지시어를 붙이기 위해선 접근 지시어를 직접 붙여야 합니다.
class Cat private constructor(){
}
private 생성자를 만드는 이유가. 인스턴스화를 막기 위해서이다.
파일 최상단에 바로 유틸함수를 작성하면 매우 편하다고 한다.
fun isDirectoryPath(path: String): Boolean{
return path.endsWith("/")
}
@Metadata(
mv = {1, 5, 1},
k = 2,
d1 = {"\u0000\u000e\n\u0000\n\u0002\u0010\u000b\n\u0000\n\u0002\u0010\u000e\n\u0000\u001a\u000e\u0010\u0000\u001a\u00020\u00012\u0006\u0010\u0002\u001a\u00020\u0003¨\u0006\u0004"},
d2 = {"isDirectoryPath", "", "path", "", "kotlin-with-java.main"}
)
public final class StringUtilsKt {
public static final boolean isDirectoryPath(@NotNull String path) {
Intrinsics.checkNotNullParameter(path, "path");
return StringsKt.endsWith$default(path, "/", false, 2, (Object)null);
}
}
프로퍼티에 접근 지시어는 다음과 같이 설정할 수 있다.
class Car(
internal val name: String,
private var owner: String,
_price: Int
) {
var price = _price
private set
}
자바와 코틀린 함께 사용할 때 주의할점
internal은 바이트 코드 상 public이 된다. 따라서 자바 코드에서는 코틀린 모듈의 internal 코드를 가져올 수 있다.
자바는 같은 패키지의 코틀린 protected 멤버에 접근할 수 있다.
이는 자바와 코틀린의 차이를 결국 자바입장에서 바라보기 때문에 가능한 것이다.
'Kotlin' 카테고리의 다른 글
중첩 클래스, 다양한 클래스 (0) | 2023.01.15 |
---|---|
Object 키워드 (0) | 2023.01.12 |
상속 (0) | 2023.01.01 |
클래스 (0) | 2022.12.05 |
함수 문법 (0) | 2022.12.04 |
댓글