728x90
자바와 코틀린의 가시성 제어
- 코틀린에서는 패키지를 namespace를 관리하기 위한 용도로만 사용하고, 가시성 제어에는 사용되지 않는다.
- 모듈: 한 번에 컴파일되는 코틀린 코드
- 자바의 기본 접근 제시어는 default이고, 코틀린의 기본 접근 제시어는 public이다.
- public: 모든 곳에서 접근 가능
- protected: 선언된 클래스 또는 하위 클래스에서만 접근 가능
- internal: 같은 모듈에서만 접근 가능
- private: 선언된 클래스 내에서만 접근 가능
코틀린 파일의 접근 제어
- 코틀린은 .kt 파일에 변수, 함수, 클래스 여러개를 바로 만들 수 있다.
- public: 기본값
- protected: 파일(최상단)에는 사용 불가능 -> 클래스 접근
- internal: 같은 모듈에서만 접근 가능
- private: 같은 파일 내에서만 접근 가능
다양한 구성 요소의 접근 제어
- 클래스 안의 멤버
- protected: 선언된 클래스 또는 하위 클래스에서만 접근 가능
- 생성자
- 가시성 범위는 동일하나, 생성자에 접근 지시어를 붙이려면 constructor를 써줘야한다.
- 자바에서 유틸성 코드를 만들때, abstract class + private constructor를 사용해서 인스턴스화를 막았다.
- 이를 코틀린에서는 파일 최상단에 바로 유틸 함수를 작성함으로써 만들 수 있다.
public abstract class StringUtils {
private StringUtils() {}
public boolean isDirectoryPath(String path) {
return path.endsWith("/");
}
}
fun isDirectoryPath(path: String): Boolean {
return path.endsWith("/")
}
- property
- 프로퍼티의 가시성 범위도 동일하다. 하지만 프로퍼티의 가시성을 제어하는 방법에 차이가 있다.
- 프로퍼티의 custome setter에 접근 지시어를 붙일 수 있다.
- 생성자에서 getter, setter 한 번에 접근 지시어를 설정
class Car(
internal val name: String,
_price: Int
){
- setter에만 추가로 가시성을 부여
var _price = _price
private set
자바와 코틀린을 함께 사용할 경우 주의할 점
- Intertal 접근 지시어는 바이트 코드상 public이 된다. 따라서 자바 코드에서는 코틀린 모듈의 internal 코드를 가져올 수 있다.
- 코틀린의 protected와 자바의 protected는 다르다.
- 코틀린에서 패키지는 namespace 관리용이기 때문에 protected는 의미가 달라졌다.
- 따라서 자바에서 코틀린 코드를 사용할 때, internal과 protected는 주의해야 한다.
728x90
'Language > kotlin' 카테고리의 다른 글
중첩 클래스 다루기 (0) | 2023.05.22 |
---|---|
object 키워드 다루기 (0) | 2023.05.22 |
상속 다루기 (0) | 2023.05.22 |
클래스 다루기 (0) | 2023.05.19 |
함수 다루기 (0) | 2023.05.18 |