1. 접근 제한자
코틀린에서 정의되는 클래스, 인터페이스, 메서드, 프로퍼티는 모두 접근 제한자 Visibility Modifiers를 가질 수 있음.
함수형 언어라는 특성 때문에 코틀린은 기본 객체지향에서 접근 제한자의 기준으로 삼았던 패키지 대신에 모듈 개념이 도입
💡 코틀린에서 모듈이란?
- 코틀린에서 모듈이란 한 번에 같이 컴파일되는 모든 파일을 말함.
안드로이드를 예로 든다면 하나의 앱이 하나의 모듈이 될 수 있음. 또한 라이브러리도 하나의 모듈.
1) 접근 제한자의 종류
🐰 접근 제한자는 서로 다른 파일에게 자신에 대한 접근 권한을 제공하는 것인데 각 변수나 클래스 이름 앞에 아무런 예약어를 붙이지
않았을 때는 기본적으로 public 접근 제한자가 적용
각각의 접근 제한자가 공개하는 범위
- public : 코틀린의 기본 접근 제한자. 어디서나 접근 가능
- internal : 같은 모듈 내에서 접근 가능. 안드로이드 개발 시에는 한 프로젝트 안에 있으면 같은 모듈
만약 한 프로젝트에 여러 모듈을 만든다면 이는 모듈 간 접근이 제한 - protected : 자식 클래스에서는 접근할 수 있음
- private : 해당 클래스 내부에서만 접근할 수 있음
2) 접근 제한자의 적용
🐰 접근 제한자를 붙이면 해당 클래스, 멤버 프로퍼티 또는 메서드에 대한 사용이 제한
open class Parent {
private val privateVal = 1
protected open val protectedVal = 2
internal val internalVal = 3
val defaultVal = 4
}
class Child: Parent() {
fun callVariables() {
// println(privateVal) // 호출이 안됨.
println(protectedVal) // 상속 관계이므로 접근할 수 있음.
println(internalVal) // 동일한 모듈이므로 접근할 수 있음
println(defaultVal)
}
}
// 상속 관계가 아닌 외부 클래스에서 Parent 클래스를 생성하고 사용.
// 상속 관계가 아니기 때문에 public과 internal 에만 접근할 수 있음
class Stranger {
fun callVariables() {
val parent = Parent()
// println(parent.privateVal) // 호출이 안됨.
// println(parent.protectedVal) // 호출이 안됨.
println(parent.internalVal)
println(parent.defaultVal)
}
}
[ 내용 참고 : IT 학원 강의 ]
'Programming Language > Kotlin' 카테고리의 다른 글
[Kotlin] lateinit 과 lazy (0) | 2024.04.24 |
---|---|
[Kotlin] 제네릭, Nullable, Safe Call, Elvis Operator (0) | 2024.04.23 |
[Kotlin] 패키지, 추상화, 인터페이스 (0) | 2024.04.22 |
[Kotlin] 오버라이드, 추상 클래스 (0) | 2024.04.18 |
[Kotlin] 오브젝트, 데이터 클래스, 클래스 상속과 확장 (0) | 2024.04.17 |