728x90

class OuterClass{
  //중첩클래스
  class NestedClass
}

중첩클래스의 class 키워드 앞에 inner 키워드를 붙이면 내부클래스가 된다.
class OuterClass{
  //내부클래스
  inner class InnerClass
}

이 두 클래스에 대해서 공통점과 차이점을 간단히 요약해보면 다음과 같다.
공통점 : 클래스 내부에 다른 클래스로 정의된다.
외형적 차이점 : inner 키워드를 쓰면 내부클래스, 안쓰면 중첩클래스이다.
기능적 차이점 : 중첩클래스는 OuterClass의 참조를 가지지 않지만 내부클래스는 OuterClass의 인스턴스를 참조를 가진다.
중첩클래스는 외형적으로는 OuterClass 소속인 것 같지만 사실은 연관성이 거의 없다.


class OuterClass {
    val outerValue = 10
    val a = "Outside Nested class."

    inner class Inner {
        private val innerValue = 20
        fun callMe() = a // OutClass 의 변수 할당 가능
        fun printItems() {
            println("inner: $innerValue, outer: $outerValue")
        }
    }

    fun printItems() {
        val inner = Inner() // 객체 생성
        inner.printItems()
    }
}

fun main(args: Array<String>) {
    val outer = OuterClass() // 객체 생성
    outer.printItems()

    println("Using outer object: ${outer.Inner().callMe()}")

    val inner = OuterClass().Inner()
    println("Using inner object: ${inner.callMe()}")
}
 


https://www.bsidesoft.com/8218 에 더 많은 내용이 있으니 참조하면 도움된다.

728x90
블로그 이미지

Link2Me

,