중첩 클래스는 하나의 클래스가 다른 클래스와 강하게 연관되어있다는 의미를 전달하기 위해 만들어진 형식
코틀린에서 한 클래스 안에 다른 클래스를 정의하면 기본적으로 NestedClass(중첩클래스)가 되고 내부클래스로 만들고 싶다면 inner키워드를 이용해야 한다.
// nested class 중첩 클래스
class Outer {
private val bar: Int = 1
class Nested {
fun foo() = 2
}
}
val demo = Outer.Nested().foo() // == 2
위와 같이 중첩 클래스에서는 외부 클래스를 참조하지 않기 때문에 Outer.Nested().foo()의 값이 2가 된다.
// inner class 내부 클래스
class Outer {
private val bar: Int = 1
inner class Inner {
fun foo() = bar
}
}
val demo = Outer().Inner().foo() // == 1
반면, 내부 클래스에서는 외부 클래스를 항상 참조하고있기 떄문에 결과 값이 1이 된다.