[Kotlin] 중첩 클래스와 내부 클래스

송규빈·2022년 7월 12일
0

중첩 클래스 (Nested Class)

하나의 클래스가 다른 클래스의 기능과 강하게 연관되어 있다는 의미를 전달하기 위해 만들어진 형식이다.

사용은 Outer.Nested() 이런식으로 사용된다.

중첩 클래스의 형식은 아래와 같이 되어있는데, Nested 클래스가 Outer 클래스 내부에 있다고해서 Outer 클래스의 내용을 사용할 수 있는 것은 아니다.

class Outer {
    class Nested {}
  }

위에서 말한 단순히 하나의 클래스가 다른 클래스의 기능과 강하게 연관되어 있다는 의미를 전달하기 위해 만들어진 클래스이므로 위치만 겹쳐있고, 서로 다른 클래스이다.

그렇다면 같은 목적으로 구현하고, 겹쳐져 있으면서 외부 클래스의 내용을 사용할 수 있는 클래스는 없을까?
바로 내부 클래스이다.(inner class)

내부 클래스 (Inner Class)

내부 클래스는 아래와 같은 형식을 갖고 있고, 외부 클래스의 내용을 사용할 수 있다.

class Outer {
    inner class Inner {}
  }

하지만 내부 클래스는 중첩 클래스와 달리 혼자서는 객체를 만들 수는 없고, 외부 클래스의 객체가 있어야만 생성과 사용이 가능하다.

예제

 fun main() {
    Outer.Nested().introduce()
    Outer().Inner().introduceInner()
    Outer().Inner().introduceOuter()
}

class Outer {
    val text = "Outer Class"

    class Nested {
        fun introduce() {
            this@
            println("Nested Class")
        }
    }

    inner class Inner {
        var text = "Inner Class"
        fun introduceInner() {
            println(text)
        }

        fun introduceOuter() {
            println(this@Outer.text)
        }
    }
}
profile
🚀 상상을 좋아하는 개발자

0개의 댓글