접근제한자 (access modifier)
특정한 변수나 메서드의 접근을 막을 수 있다.
- 접근: 객체를 이용해 변수나 메서드를 호출할 수 있는지의 여부
접근제한자 종류
- public : 명시하지 않으면 기본적으론 public (어디서나 접근 가능)
- private : 동일한 클래스 내부에서만 접근 가능
- internal : 같은 모듈 내부에서만 접근 가능 (모듈: 패키지, 클래스 포함)
- protected : 기본적으로 private, 상속을 받은 경우 상속 받은 클래스 내부에서만 접근 가능
접근제한자가 필요한 이유
- 접근 권한을 이용해 데이터에 대한 무분별한 접근을 막을 수 있다.
- 적절한 접근제한자를 사용하지 않으면 에러 발생!
- 클래스 간에 접근하면 안 되는 상황을 구분하기 때문에 유지보수 용이.
예제
(1) 접근제한자 테스트
- AccessTestClass.kt 클래스 파일
class AccessTestClass {
public var a:Int = 1
var b = 2
private var c = 3
internal var d = 4
protected var e = 5
public fun publicTest() {
println("public 입니다")
}
fun publicTest2() {
println("public 입니다")
}
private fun privateTest() {
println("private 입니다")
}
internal fun internalTest() {
println("internal 입니다")
}
protected fun protectedTest() {
println("protected 입니다")
}
}
fun main() {
var access = AccessTestClass()
println(access.a)
println(access.b)
println(access.c)
println(access.d)
println(access.e)
}
(2) 접근제한자 테스트 2
- AccessTestClass.kt 클래스 파일
open class AccessTestClass {
public var a:Int = 1
var b = 2
private var c = 3
internal var d = 4
protected var e = 5
public fun publicTest() {
println("public 입니다")
}
fun publicTest2() {
println("public 입니다")
}
private fun privateTest() {
println("private 입니다")
}
internal fun internalTest() {
println("internal 입니다")
}
protected fun protectedTest() {
println("protected 입니다")
}
}
- AccessTestChildClass.kt 파일
// 부모 클래스 AccessTestClass를 상속받음
class AccessTestChildClass: AccessTestClass() {
fun protectedTest1() {
println("e의 값은 ${e}") //AccessTestChildClass는 AccessTestClass를 상속받았기 때문에 변수 e에 접근이 가능
}
}
fun main() {
var access = AccessTestChildClass()
println(access.a)
println(access.b)
println(access.c)
println(access.d)
println(access.e)
access.protectedTest1()
}
참고자료
https://www.geeksforgeeks.org/kotlin-visibility-modifiers/