Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- crawler
- Android
- python
- package
- ML
- kotlin
- List
- pushnamed
- Yocto
- text
- map
- 웹크롤러
- animation
- 다트
- 콜렉션
- 파이썬
- function
- 함수
- import
- 플러터
- textstyle
- 클래스
- 크롤러
- set
- Class
- Collection
- 코틀린
- DART
- variable
- Flutter
Archives
- Today
- Total
조용한 담장
코틀린(Kotlin) 클래스(Class) : 중첩 클래스 와 내부 클래스 (Nested and Inner Classes) 본문
kotlin
코틀린(Kotlin) 클래스(Class) : 중첩 클래스 와 내부 클래스 (Nested and Inner Classes)
iosroid 2019. 12. 31. 18:35
코틀린의 중첩 클래스(nested class) 와 내부 클래스(inner class) 에 대해 알아보자.
원문 https://kotlinlang.org/docs/reference/nested-classes.html 을 보며 정리.
Nested classes
class Outer {
private val bar: Int = 1
class Nested {
fun foo() = 2
}
}
val demo = Outer.Nested().foo() // == 2
Inner classes
중첩 클래스는 inner 로 표시하고 외부클래스(outer class) 에서 멤버의 접근이 가능하다.
내부 클래스는 외부 클래스의 오브젝트 레퍼런스를 가지고 있다.
class Outer {
private val bar: Int = 1
inner class Inner {
fun foo() = bar
}
}
val demo = Outer().Inner().foo() // == 1
Qualified this expressions 을 통해 내부 클래스에서 this 의 타겟을 명확하게 할 수 있다.
Qualified this
외부에 class, extension function, labeled function with receiver 들을 접근하기 위해 사용한다.
this@label 형식으로 사용한다.
class A { // implicit label @A
inner class B { // implicit label @B
fun Int.foo() { // implicit label @foo
val a = this@A // A's this
val b = this@B // B's this
val c = this // foo()'s receiver, an Int
val c1 = this@foo // foo()'s receiver, an Int
val funLit = lambda@ fun String.() {
val d = this // funLit's receiver
}
val funLit2 = { s: String ->
// foo()'s receiver, since enclosing lambda expression
// doesn't have any receiver
val d1 = this
}
}
}
}
Anonymous inner classes
Anonymous inner class 의 인스턴스는 object expression 을 사용하여 생성한다.
window.addMouseListener(object : MouseAdapter() {
override fun mouseClicked(e: MouseEvent) { ... }
override fun mouseEntered(e: MouseEvent) { ... }
})
JVM 에서, 오브젝트가 functional java interface 의 인스턴스 일때, interface 타입을 prefix 로 lambda expression 을 사용하여 생성할 수 있다.
val listener = ActionListener { println("clicked") }
'kotlin' 카테고리의 다른 글
코틀린(Kotlin) 클래스(Class) : 제네릭(Generics) (0) | 2020.01.02 |
---|---|
코틀린(Kotlin) 클래스(Class) : 타입 별명 (Type aliases) (0) | 2019.12.31 |
코틀린(Kotlin) 클래스(Class) : Sealed Classes (0) | 2019.12.31 |
코틀린(Kotlin) 클래스(Class) : 열거 클래스 (Enum classes) (0) | 2019.12.31 |
코틀린(Kotlin) 클래스(Class) : 데이터 클래스 (Data Classes) (0) | 2019.12.31 |
Comments