본문 바로가기
코틀린/코틀린 공식문서

[코틀린 공식문서] Nested and inner classes; 중첩 및 내부 클래스

by 측면삼각근 2023. 8. 13.
728x90
반응형

들어가기 전에

해당 블로깅은 코틀린 공식문서의 nested and inner classes를 번역하며 학습한 내용입니다.

학습 중임에 따라 이해하는데 도움이 되는 부분들을 추가되고 의역된 부분이 있습니다. 혹시 잘못된 설명이 있다면 얼마든지 제보해 주세요.


클래스는 다른 클래스에 중첩될 수 있다.

class Outer {
    private val bar: Int = 1
    class Nested {
        fun foo() = 2
    }
}

val demo = Outer.Nested().foo() // == 2

중첩과 함께 인터페이스를 사용 할 수 도 있다.
인터페이스-클래스간 모든 중첩이 가능(클래스-인터페이스, 인터페이스-클래스, 인터페이스-인터페이스)

interface OuterInterface {
    class InnerClass
    interface InnerInterface
}

class OuterClass {
    class InnerClass
    interface InnerInterface
}

Inner classes 내부 클래스

inner로 표시된 중첩 클래스(nested class)는 해당 외부 클래스의 맴버에 액세스 할 수 있다.
내부 클래스는 외부 클래스의 객체에 대한 참조를 전달한다.

class Outer {
    private val bar: Int = 1
    inner class Inner {
        fun foo() = bar
    }
}

val demo = Outer().Inner().foo() // == 1

Anonymous inner classes 익명 내부 클래스

익명 내부 클래스는 object expression을 사용하여 만들어진다.

window.addMouseListener(object : MouseAdapter() {

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

    override fun mouseEntered(e: MouseEvent) { ... }
})
JVM에서 오브젝트가 기능적 Java 인터페이스의 인스턴스인 경우 (즉, 단일 추상 메소드가 있는 Java 인터페이스) 인터페이스 유형이 접두어로 붙은 람다 표현식을 사용하여 이를 작성 할 수 있다.
val listener = ActionListener { println("clicked") }

 

반응형