[Kotlin] 중첩 클래스와 내부 클래스 설명 & 예제

728x90

클래스 안에서 클래스가 중첩되는 두가지 유형

중첩 클래스(Nested Class)

class Outer {
    class Nested {

    }
}
  • 하나의 클래스가 다른 클래스의 기능과 강하게 연관 되어 있다는 의미를 전달하기 위해 만들어진 형식으로 사용할 때는 Outer.Nested()와 같이 사용
  • 외부 클래스의 내용을 공유 할 수 없음(별개)

내부 클래스(Inner class)

class Outer {
    inner class Inner {

    }
}
  • 혼자서 객채를 만들 수는 없고 외부 클래스의 객체가 있어야지 생성과 사용이 가능한 클래스를 말함
  • 외부 클래스의 속성과 함수의 사용이 가능

예제

fun main() {
    Outer.Nested().introduce()

    val outer = Outer()
    val inner = outer.Inner()

    inner.introduceInner()
    inner.introduceOuter()

    outer.text = "Changed Outer Class"
    inner.introduceOuter()
}

class Outer {
    var text = "Outer Class"

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

    inner class Inner {
        var text = "Inner Class"

        fun introduceInner() {
            println(text)
        }

        fun introduceOuter() {
            //Inner, Outer 에 같은 이름의 속성이나 함수가 있을 경우 this@OuterClassName 로 참조 하면
            println(this@Outer.text)
        }
    }
}

 

중첩 클래스와 내부클래스는 클래스간의 연계성을 표현하여 코드의 가독성 및 편의성이 증가 할 수 있으므로

적절한 상황에서 사용하는 것이 좋다.

728x90

댓글

Designed by JB FACTORY