액세스 제한
액세스 수정자는 클래스 외부에서 클래스, 속성, 메서드 등에 대한 액세스를 제한/관리하는 데 사용됩니다.
Kotlin에는 public internal, protected 및 private의 네 가지 키워드가 있습니다.
public(Default) : 접근 제한자를 명시하지 않았을 경우, public이 디폴트로 지정됩니다.
public은 이름처럼, 아무나 접근할 수 있는 형태입니다.
private : 프라이빗. 사적인. 이라는 뜻 처럼, 같은 파일(클래스) 내에서만 접근 가능합니다.
internal : 같은 모듈 내에서만 접근 가능합니다.
protected : 같은 클래스와 자식 클래스에서만 접근 가능합니다.
이들의 역할은 다음과 같습니다.
사적인
비공개 – 클래스, 속성 및 메서드용
class MyClass {
private var a = 10
private fun say() {
println(a)
}
}
fun main() {
val myClass = MyClass()
myClass.say() // 에러발생. private 이므로 접근 불가
myClass.a = 3 // 에러발생. private 이므로 접근 불가
}
클래스의 멤버 변수와 메서드가 비공개인 경우
멤버 변수 및 클래스에 대한 액세스는 불가능합니다.
클래스 내에서만 접근이 가능합니다.
비공개 – 레슨용
- file1.kt
private class MyClass
private fun test() {
println("a")
}
- file2.kt
fun main() {
val myClass = MyClass() // 생성 불가!
test() // 호출 불가!
}
Kotlin과 Java에서는 다른 파일에 정의된 클래스와 메서드를 가져오기를 통해 가져오고 사용할 수 있습니다.
단, 메소드 및 클래스에 대한 접근이 비공개로 제어되면 외부 파일에서 사용할 수 없습니다.
보호
open class MyClass {
var a = 10
private var b = 10
protected var c = 10
private fun say() {
println(a)
}
}
class MyChildClass : MyClass() {
fun init() {
a = 100 // public(default)는 외부에서 접근이 가능하며, 자식클래스 역시 접근 가능
b = 1000 // 에러!
!
!
private는 외부에서도, 자식 클래스에서도 접근이 불가
c = 10000 // protect는 외부에서 접근이 불가하나, 자식 클래스에서는 접근이 가능함
}
}
fun main() {
val myChildClass = MyChildClass()
myChildClass.a = 10 // public에서는 외부에서 접근 가능
myChildClass.b = 100 // 에러!
!
!
private는 외부에서 접근 불가
myChildClass.c = 1000 // 에러!
!
!
protected는 외부에서 접근 불가, 자식 클래스에서 접근 가능
}
protect는 자신과 하위 클래스에 대한 액세스만 제한하는 키워드입니다.
외부에서 액세스할 수 없으며 클래스 자체와 상속된 클래스만 액세스할 수 있습니다.
내부
Internal은 Java가 아닌 Kotlin의 새로운 액세스 수정자입니다.
동일한 모듈 내에서 액세스를 허용하는 액세스 한정자입니다.
Kotlin의 모듈은
- IntelliJ IDEA 모듈
- 메이븐/그레이들 프로젝트
- 단일 Ant 태스크에서 함께 컴파일된 파일
는 다음과 같이 정의됩니다.
Kotlin에서 액세스 수정자의 범위는 public(default) > protected/internal / private 입니다.
부착. 외부 접근 차단이 필요하신가요?
클래스의 메서드 및 속성은 클래스별 속성입니다.
외부로 유출되거나 외부에서 접근(사용)이 가능한 경우
보안 취약성 또는 예기치 않은 시스템 동작일으킬 수 있습니다
개체의 속성과 동작을 함께 묶고 숨김으로써 숨깁니다.
이것은 객체 지향 프로그래밍의 핵심 원칙 중 하나입니다.
캡슐화 및 정보 은닉 보지마.
또한 객체 지향의 다른 요소인 모듈성, 응집력, 독립성 및 결합과도 관련이 있습니다.
자유롭게 사용 가능한 방식의 경우 유지보수 중 이 방식이 변경되면
이 메서드를 외부적으로 사용하는 모든 코드도 변경해야 합니다.
접근 제한을 이용하여 외부 접근을 차단함으로써,
종속(캡슐화)되고 클래스 내에서 사용되는 경우 어떻게 됩니까?
클래스 내부의 코드만 변경하면 되므로 유지 관리가 용이함그것은 끝날 것이다