본문

170823(수) - Kotlin docs (Visibility Modifiers)

Kotlin docs




Visibility Modifiers

- private, protected, internal, public

- can have : Classes, objects, interfaces, constructors, functions, properties, setter

- getter는 해당 property의 visibility를 따라간다.



Packages

- functions, properties, classes, objects, interfaces 는 package 내부에서 직접 선언이 가능하다 (top-level)

// file name: example.kt package foo fun baz() {} class Bar {}


ㆍpublic (default) : everywhere visible

ㆍprivate : 선언이 포함된 file 내부에서만 visible

ㆍinternal : everywhere visible in same module

ㆍprotected : not available top-level 


// 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 : class 내부에서만 visible

- protected : same as private + subclasses visible

- internal :  declaring class를 보는 module안에 있는 client는 internal members를 본다.

- public : declaring class를 보는 client는 public members를 본다.


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 }



ㆍConstructor

- primary constructor의 visibility는 explicit 하게 constructor keyword를 추가해야 한다.

class C private constructor(a: Int) { ... }


- 기본적으로 constructor는 public

- internal class의 constructor는 동일한 module 내에서만 볼 수 있다.



ㆍLocal declarations

- local variables, functions, classes는 visibility modifiers를 가질 수 없다.



Modules

- internal visibility modifier는 member가 동일한 module 내에서 볼 수 있다는 것을 의미

- Module : 함께 complie된 Kotlin file set

ㆍIntelliJ IDEA module

ㆍMaven project

ㆍGradle source set

ㆍAnt task를 한번 invoke하여 compile된 file set

공유

댓글