파게로그

[OOP] Nested class and Inner class 본문

콤퓨타 왕기초/Kotlin

[OOP] Nested class and Inner class

파게 2021. 6. 13. 02:06

Java와 같이, Kotlin은 nested class라고 알려진, 한 클래스 내부에 다른 클래스를 정의하는 것이 가능하다. 내부 클래스에의 접근은 다른 멤버들과 같이 .을 통해서 가능하다.

그런데 Java에서는 어떤 클래스 내부에 다른 클래스를 선언하면 이는 기본적으로 inner class가 되지만, Kotlin에서는 inner class를 생성하기 위해서는 inner modifier를 사용해야만 한다.

 

nested class는 outer class에 접근할 수 없다. 예를 들어서 다음 코드는 컴파일 에러가 발생하는데, nested class가 outer class의 property인 foo에 접근을 시도했기 때문이다.

 

class Outer {
    val foo = "Outer class"
    
    class Nested {
        fun callMe() = foo // Error
    }
}

fun main() {
    val outer = Outer()
    println(outer.Nested().callMe())
}

 

이 문제를 해결하기 위해서는, nested class를 inner로 표지하여 inner class로 설정해주어야 한다. inner classes는 outer class에 대한 참조를 가지고 있으며, 따라서 outer class의 멤버에 접근할 수 있다.

 

class Outer {
    val foo = "Outer class"

    inner class Nested {
        fun callMe() = foo // OK
    }
}

fun main() {
    val outer = Outer()
    println(outer.Nested().callMe())
}

'콤퓨타 왕기초 > Kotlin' 카테고리의 다른 글

[OOP] Sealed Classes  (0) 2021.06.13
[OOP] Data Class  (0) 2021.06.13
[OOP] Abstract class, Interface  (0) 2021.06.12
[OOP] Visibility Modifiers  (0) 2021.06.12
[OOP] inheritance  (0) 2021.06.12
Comments