파게로그
[OOP] Visibility Modifiers 본문
접근 제한자...
클래스, 객체, 인터페이스, 생성자, 함수, property, setter에 대한 키워드이다. 다만 getter의 visibiltiy는 언제나 property의 그것과 같기 때문에 설정할 수 없다. 그리고 명시되지 않으면 public으로 설정된다.
package 내부의 visibility modifiers
package는 관련된 함수, properties, 클래스, 객체, 인터페이스의 집합을 구성한다.
Modifier | Description |
public | declarations are visible everywhere |
private | visible inside the file containing the declaration |
internal | visible inside the same module (a set of Kotlin files compiled together) |
protected | not available for packages (used for subclasses) |
// file name: Hello.kt
package test
fun fun1() { /* ... */ }
// visible everywhere (public by default)
private fun fun2() { /* ... */ }
// visible inside Hello.kt
internal fun fun3() { /* ... */ }
// visible inside the same module
var name = "Kitty"
// visible everywhere
get() = field
// visible inside Hello.kt (same as its property)
private set(value) {
field = value
}
// visible inside Hello.kt
private class class1 { /* ... */ }
// visible inside Hello.kt
클래스와 인터페이스 내부의 visibility modifiers
클래스 내부에 선언된 멤버(functions, properties)에 대한 visiblity modifiers에 대한 설명이다. 참고로, derived class에서 visibility에 대한 명시 없이 protected member를 오버라이드하면, 오버라이드된 멤버의 visibility 또한 protected로 설정된다.
Modifier | Description |
public | visible to any client who can see the declaraing class |
private | visible inside the class only |
internal | visible inside the class and its subclasses |
protected | visible to any client inside the module that can see the declaring class |
open class Base() {
var a = 1 // public by default
private var b = 2 // private to Base class
protected open val c = 3 // visible to Base and Derived
internal val d = 4 // visible inside the same module
protected fun f() { /* ... */ } // visible to Base and Derived
}
class Derived: Base() {
// a, c, d, f(): visible
// b: NOT visible
override val c = 10 // protected by overriding
}
fun main(args: Array<String>) {
val base = Base()
// base.a, base.d: visible
// base.b, base.c: NOT visible
val derived = Derived()
// derived.c: NOT visible
}
생성자의 visibility 변경
기본적으로, 생성자의 visibility는 public이다. 그러나 constructor 키워드를 명시적으로 추가함으로써 visibility를 변경할 수 있다.
class Student(val age: Int) {
// ...
}
위 클래스의 생성자는 visibility가 public이지만, 이를 아래와 같이 수정하여 private로 바꿀 수 있다.
class Student private constructor (val age: Int) {
// ...
}
참고로, local functions, local variables, 그리고 클래스는 visibility modifier를 가질 수 없다...!
'콤퓨타 왕기초 > Kotlin' 카테고리의 다른 글
[OOP] Nested class and Inner class (0) | 2021.06.13 |
---|---|
[OOP] Abstract class, Interface (0) | 2021.06.12 |
[OOP] inheritance (0) | 2021.06.12 |
[OOP] Getters and Setters (0) | 2021.06.11 |
[OOP] Constructors (0) | 2021.06.10 |
Comments