Kotlin 객체에 대한 액세스 수정자(Visibility Modifiers)

2973 단어
클래스, 대상, 인터페이스, 구조 함수, 함수, 속성 및 setter 방법은 가시적인 수식자에 의해 수식될 수 있다.Getter 메서드는 항상 속성과 동일한 가시성을 갖습니다.Kotlin에는 private,protected,internal,public 등 네 개의 가시적인 수식자가 있습니다.현식 수식자가 없으면 기본 가시성은public입니다.
다음은 서로 다른 유형의 수식자에 대한 성명의 작용 범위를 보십시오.

패키지


함수, 속성, 클래스, 대상과 인터페이스는 원본 파일의 최상위 구성 부분으로 간주할 수 있다. 즉, 가방에 직접 존재할 수 있고, 다른 플러그인이 필요하지 않다. (자바에서는 원본 파일에 클래스의 일부분으로 존재해야 한다.)
// file name: example.kt
package foo

fun baz() {}
class Bar {}
  • 가시성 수식자가 명시되지 않으면 기본값은 public입니다. 즉, public에 명시된 내용은 프로젝트의 다른 어느 곳에서든 접근할 수 있습니다.
  • 만약에 private 수식자로 수식되면private로 수식된 내용은 이 원본 파일에서만 볼 수 있습니다.
  • 만약 internal 수식자로 수식한다면 모듈(module) 내부에서만 볼 수 있다.
  • protected 수식자는 원본 파일의 직접적인 구성 등급 부분에서 사용할 수 없습니다.

  • 예는 다음과 같습니다.
    // file name: example.kt
    package foo
    
    private fun foo() {} // visible inside example.kt
    
    public var bar: Int = 5 // property is visible everywhere
        private set         // setter is visible only in example.kt
        
    internal val baz = 6    // visible inside the same module
    

    클래스 및 인터페이스(Classes and Interfaces)


    클래스의 구성원에게
  • private 수식부호는 클래스 내부에서만 볼 수 있음을 의미한다(즉 이 클래스의 모든 구성원에게만 볼 수 있다)
  • protected 수식부호는 클래스 내부와 하위 클래스 내부에서
  • 을 볼 수 있음을 의미한다
  • internal 수식자는 이 모듈에서 성명류를 볼 수 있는 모든 클라이언트가 internal 수식자에 수식된 구성원
  • 을 본다는 것을 의미한다
  • public은 성명류를 본 모든 고객이 공개 구성원을 보았다는 것을 의미한다.

  • 자바 개발자는 Kotlin에서 외부 클래스는 내부 클래스의 개인 구성원을 볼 수 없습니다.
    만약 protected의 멤버를 다시 썼고 표시된 가시적 수식자가 없다면, 다시 쓴 멤버는 기본적으로 protected 수식자로 수식됩니다.다음과 같습니다.
    open class Outer {
        private val a = 1
        protected open val b = 2
        internal val c = 3
        val d = 4  // public by default
        
        protected class Nested {
            public val e: Int = 5
        }
    }
    
    class Subclass : Outer() {
        // a is not visible
        // b, c and d are visible
        // Nested and e are visible
    
        override val b = 5   // 'b' is protected
    }
    
    class Unrelated(o: Outer) {
        // o.a, o.b are not visible
        // o.c and o.d are visible (same module)
        // Outer.Nested is not visible, and Nested::e is not visible either 
    }
    

    구조자(Constructors)


    하나의 종류의 주 구조기에 가시적인 수식자를 지정하려면 다음과 같은 문법을 사용해야 한다(현식 성명 constructor 키워드가 필요하다).
    class C private constructor(a: Int) { ... }
    

    이러니저러니 구조기는 사유다.기본적으로 모든 구조기는 public로 클래스가 보이는 곳에서 대응하는 구조기가 보이는 것을 의미한다(즉, internal에 의해 수식된 클래스의 구조 함수는 같은 모듈에서만 볼 수 있다).

    로컬 선언(Local declarations)


    국부 변수, 국부 함수, 국부 클래스는 가시적 수식자에 의해 수식될 수 없습니다.

    모듈(Module)

    internal 수식부호로 장식된 멤버는 같은 모듈 내부에서만 볼 수 있다는 것을 의미한다.더 정확히 말하면, 하나의 모듈은 동시에 컴파일된 일련의 Kotlin 파일을 가리킨다.
  • Intellij IDEA 개발 도구의 모듈
  • Maven 또는Gradle 프로젝트 1개
  • 은 Ant 작업이 컴파일된 파일 세트를 호출합니다.
  • 좋은 웹페이지 즐겨찾기