일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- List
- kotlin
- import
- textstyle
- DART
- pushnamed
- map
- Collection
- variable
- crawler
- 파이썬
- 코틀린
- ML
- Flutter
- 함수
- set
- 크롤러
- 콜렉션
- 웹크롤러
- text
- Class
- Yocto
- function
- Android
- animation
- package
- 플러터
- 클래스
- 다트
- python
- Today
- Total
조용한 담장
코틀린(Kotlin) 클래스(Class) : Visibility Modifiers 본문
코틀린의 Visibility Modifier 를 살펴보자.
원문 https://kotlinlang.org/docs/reference/visibility-modifiers.html 을 보며 정리.
class, object, interface, constructor, function, property 와 그들의 setter 들은 visibility modifier 를 가질 수 있다.
visibility modifier : private, protected, internal, public
기본은 public 이다.
Packages
function, property 와 class, object 와 interface 는 package 내에서 최상위에서 바로 선언할 수 있다.
// file name: example.kt
package foo
fun baz() { /*...*/ }
class Bar { /*...*/ }
이렇게 패키지 내의 최상위에서 선언된 것들의 visibility 관련 속성은 아래와 같다.
public 은 다른 설정이 없다면 기본 값이다. 모든 곳에서 접근이 가능하다.
private 은 선언한 파일 내에서만 접근이 가능하다.
internal 은 같은 모듈 안 어디에서나 접근이 가능하다.
protected 은 최상위 선언(top-level declaration)이 불가능 하다.
다른 패키지로부터 최상위 선언들을 사용하려면 import 를 해야한다.
// 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
클래스 멤버의 visibility 속성은 아래와 같다.
private 는 클래스 내에 있는 멤버들 사이에서만 접근이 가능하다.
protected 는 private 과 같고 subclass 에서 접근이 가능하다.
internal 은 모듈내에서 클래스의 정의를 볼 수 있는 모든 클라이언트들은 internal 멤버들을 볼 수 있다.
public 은 클래스의 정의를 볼 수 있는 모든 클라이언트들은 public 멤버들을 볼 수 있다.
중첩된 클래스의 경우 외부 클래스는 내부 클래스의 private 멤버를 볼 수 없다.
protected 멤버를 override 할 때 visibility 변경을 선언해주지 않으면 그대로 유지한다.
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
클래스의 primary constructor 의 visibility 를 설정하려면 아래의 문법대로 constructor 와 함께 쓴다.
class C private constructor(a: Int) { ... }
모든 생성자는 public 이 기본이다.
Local declarations
지역 변수, 함수와 클래스는 visibility modifier 를 가질 수 없다.
'kotlin' 카테고리의 다른 글
코틀린(Kotlin) 클래스(Class) : 데이터 클래스 (Data Classes) (0) | 2019.12.31 |
---|---|
코틀린(Kotlin) 클래스(Class) : 확장 (Extensions) (0) | 2019.12.31 |
코틀린(kotlin) 클래스(Class) : 인터페이스 (Interfaces) (0) | 2019.12.31 |
코틀린(Kotlin) 클래스(Class) : 프로퍼티 와 필드 (Properties and Fields) (0) | 2019.12.31 |
코틀린(Kotlin) : 리턴 과 점프 (Returns and Jumps) (0) | 2019.12.31 |