BackEnd/Kotlin
11강. 코틀린에서 접근 제어를 다루는 방법
hanseom
2024. 3. 7. 22:00
반응형
- 자바와 코틀린의 가시성 제어
- 코틀린 파일의 접근 제어
- 다양한 구성요소의 접근 제어
- 자바와 코틀린을 함께 사용할 경우 주의할 점
자바와 코틀린의 가시성 제어
접근 지시어 | Java | Kotlin |
public | 모든 곳에서 접근 가능 | |
protected | 같은 패키지 또는 하위 클래스에서만 접근 가능 | 선언된 클래스 또는 하위 클래스에서만 접근 가능 |
default | 같은 패키지에서만 접근 가능 | X |
internal | X | 같은 모듈에서만 접근 가능 |
private | 선언된 클래스 내에서만 접근 가능 |
- Kotlin에서 패키지는 namespace 관리용이기 때문에 Java의 protected와 의미가 다릅니다.
- Kotlin에서는 default가 사라지고, 모듈간의 접근을 통제하는 internal이 생겼습니다.
- 모듈: 한 번에 컴파일 되는 Kotlin 코드 (IDEA Module, Maven Project, Gradle Source Set, Ant Task <kotlinc>의 호출로 컴파일 파일의 집합
- Java의 기본 접근 지시어는 default
- Kotlin의 기본 접근 지시어는 public
코틀린 파일의 접근 제어
코틀린은 .kt 파일에 변수, 함수, 클래스 여러개를 바로 만들 수 있습니다.
public | 기본값 어디서든 접근할 수 있습니다. |
protected | 파일(최상단)에는 사용 불가능 |
internal | 같은 모듈에서만 접근 가능 |
private | 같은 파일 내에서만 접근 가능 |
다양한 구성요소의 접근 제어
클래스, 생성자, 프로퍼티의 접근 제어는 Kotlin의 가시성 제어와 동일합니다.
public | 모든 곳에서 접근 가능 |
protected | 선언된 클래스 또는 하위 클래스에서만 접근 가능 |
internal | 같은 모듈에서만 접근 가능 |
private | 선언된 클래스 내에서만 접근 가능 |
단, 생성자에 접근 지시어를 붙이려면, 다음과 같이 constructor를 붙여줘야 합니다. public constructor가 생략된 상태이기 때문입니다.
class Bus internal constructor(
val price: Int
)
프로퍼티의 가시성을 제어하는 방법에는 다음과 같이 두 가지 방법이 존재합니다.
class Car(
internal val name: String, // 1) getter, setter 한 번에 접근 지시어를 정함
_price: Int
) {
var price = _price
private set // 2) setter에만 추가로 가시성 부여
}
자바와 코틀린을 함께 사용할 경우 주의할 점
- Internal은 바이트 코드 상 public이 됩니다. 때문에 Java 코드에서는 Kotlin 모듈의 internal 코드를 가져올 수 있습니다.
- Kotlin의 protected와 Java의 protected는 다릅니다. Java는 같은 패키지의 Kotlin protected 멤버에 접근할 수 있습니다.
감사합니다.
반응형