(2부 복사) 4. Kotlin 및 액세스 제한


액세스 제한

액세스 수정자는 클래스 외부에서 클래스, 속성, 메서드 등에 대한 액세스를 제한/관리하는 데 사용됩니다.

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 입니다.

부착. 외부 접근 차단이 필요하신가요?

클래스의 메서드 및 속성은 클래스별 속성입니다.

외부로 유출되거나 외부에서 접근(사용)이 가능한 경우

보안 취약성 또는 예기치 않은 시스템 동작일으킬 수 있습니다

개체의 속성과 동작을 함께 묶고 숨김으로써 숨깁니다.

이것은 객체 지향 프로그래밍의 핵심 원칙 중 하나입니다.

캡슐화 및 정보 은닉 보지마.

또한 객체 지향의 다른 요소인 모듈성, 응집력, 독립성 및 결합과도 관련이 있습니다.

자유롭게 사용 가능한 방식의 경우 유지보수 중 이 방식이 변경되면

이 메서드를 외부적으로 사용하는 모든 코드도 변경해야 합니다.

접근 제한을 이용하여 외부 접근을 차단함으로써,

종속(캡슐화)되고 클래스 내에서 사용되는 경우 어떻게 됩니까?

클래스 내부의 코드만 변경하면 되므로 유지 관리가 용이함그것은 끝날 것이다