[Kotlin] 내부 클래스와 중첩클래스 차이
내부 클래스(inner class) 와 중첩 클래스(nested class)
코틀린과 자바의 차이
자바에서는 A클래스 안에 B클래스를 정의하면 B클래스는 자동으로 A클래스의 내부 클래스가 되어 A클래스 안의 객체를 참조할 수 있다.
코틀린에서는 이 경우 기본적으로 ⭐️중첩 클래스⭐️가 된다.
내부 클래스로 만들고 싶으면 inner 를 붙여 클래스를 선언해야 한다.
내부 클래스는 기본적으로 외부 클래스를 참조하여 객체에 접근이 가능하다.
코틀린 공식 문서 예시
class Outer{
private val bar: Int = 2
class Nested{
fun foo() = 2
}
}
val demo1 = Outer.Nested().foo() // =2
//inner class
class Outer{
private val bar: Int = 1
inner class Inner{
fun foo() = bar
}
}
val demo2 = Outer().Inner().foo() // =1
이 코드를 실행 시키면 demo1 에서 오류가 발생한다.
그 이유는 Nested() 클래스가 중첩 클래스이므로
Outer().Nested().foo() 에서 오류가 발생된다. Nested()클래스는 내부 클래스가 아니기에 참조 불가이고, 또한 Outer() 클래스의 멤버변수인 bar에 접근할 수 없다!!
따라서 접근 시 Outer()가 아닌 Outer로 해야한다.
fun main() {
//중첩 클래스 nested class
val demo1 = Outer.Nested().foo() //=2
println(demo1)
}
demo2는 내부 클래스라고 inner키워드를 선언했으므로 외부클래스 Outer()의 멤버 변수 bar를 참조할 수 있다.
Author And Source
이 문제에 관하여([Kotlin] 내부 클래스와 중첩클래스 차이), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jiyoon/Kotlin-내부-클래스와-중첩클래스-차이저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)