Kotlin의 접근 제어 다루기
Java와 Kotlin의 가시성 제어
Java의 접근 제어
- public : 모든 곳에서 접근 가능
- protected :
같은 패키지
, 하위 클래스만 접근 가능 - default : 같은
패키지
만 접근 가능 - private : 선언된 클래스 내에서만 접근 가능
Kotlin의 접근 제어
- public : 모든 곳에서 접근 가능
- protected :
선언된 클래스
, 하위 클래스만 접근 가능- Kotlin은 기본적으로 패키지를
namespace
를 관리하기 위한 용도로만 사용 - 가시성 제어는 사용하지 않음
- Kotlin은 기본적으로 패키지를
- internal : 같은
모듈
에서만 접근 가능- 모듈 : 한번에 컴파일 되는 Kotlin Code
- private : 선언된 클래스 내에서만 접근 가능
접근 제어를 사용하지 않는 경우
- Java : default
- Kotlin : public
Kotlin 파일의 접근 제어
Kotlin은 .kt 파일에 변수, 함수, 클래스 여러개를 바로 만들 수 있다.
.kt 파일의 접근 제어
- public : 기본 값 / 어디서든 접근 가능
- protected : 파일(최상단)에서는 사용 불가
- internal : 같은 모듈에서만 접근 가능
- private : 같은 파일내에서만 접근 가능
다양한 구성요소의 접근 제어
클래스, 생성자, 프로퍼티 접근 제어
- public : 모든 곳에서 접근 가능
- protected : 선언된 클래스, 하위 클래스만 접근 가능
- internal : 같은 모듈에서만 접근 가능
- private : 선언된 클래스내에서만 접근 가능
생성자에 접근 제어를 하려면 constructor를 써주어야 한다.
예시
1
2
3
class Store internal constructor(
val price: Int
)
프로퍼티 가시성 범위도 동일
getter, setter 한 번에 접근 지시어를 정하는 예시
1
2
3
4
5
6
7
8
9
class Car(
internal val name: String,
_price: Int
){
// getter는 public으로 두고
// setter만 private로 세팅
var price = _price
private set
}
Java와 Kotlin을 함께 사용할 경우 주의할 점
internal
은 바이트 코드 상으로public
이 된다.- Java 코드에서 Kotlin 모듈의
internal
코드를 가져올 수 있다.
Kotlin의 protected와 Java의 protected의 의미가 다르다.
- Java는 같은 패키지의 Kotlin protected 멤버에 접근할 수 있다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.