프로그래밍 언어/Kotlin

Kotlin의 class(3) - Nested and inner classes

Julie825 2022. 10. 3. 21:23

Nested and inner classes

클래스 내부에서 클래스를 선언하는 것이 가능하다. Interface도 클래스처럼 생각하고 사용하면 된다.

class Outer {
    private val bar: Int = 1
    class Nested { fun foo() = 2}
}
interface OuterInterface {
    class InnerClass
    interface InnerInterface
}
class OuterClass {
    class InnerClass
    interface InnerInterface
}

이때 한 클래스의 소속이라는 것을 더 강조해주고 싶다면 inner 를 사용한다.

inner class에서는 outer class의 속성에 접근하는 것이 가능하다.

class Outer {
    private val bar: Int = 1
    inner class Nested { val o = this@Outer } // inner 사용법
}

 

객체의 속성에 Anonymous inner classes를 만들어 할당하고싶다면 object expression을 사용한다.

window.addMouseListener(object : MouseAdapter() {

    override fun mouseClicked(e: MouseEvent) { ... }

    override fun mouseEntered(e: MouseEvent) { ... }
})
// 이런게 나와도 놀라지말자. Primary constructor에 object로 선언해줬을 뿐이다.