본문 바로가기

Language/Kotlin

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

728x90
반응형

중첩클래스 (Nested Class)

: 하나의 클래스가 다른 클래스의 기능과 강하게 연관되어 있다는 의미를 전달하기 위해 만들어진 형식. 형태만 내부에 존재할 뿐 실질적으로는 서로 내용을 공유할 수 없다.

 

선언

class Outer{
    class Nested{
    }
}

사용

Outer.Nested()

내부 클래스 (Inner Class)

: 혼자서 객체를 만들 수는 없고 외부 클래스의 객체가 있어야만 생성과 사용 가능. 외부 클래스 객체의 속성이나 함수를 사용할 수 있다.

 

class Outer{
    inner class Inner{
    }
}

 

Outer 클래스와 Inner 클래스에 같은 이름의 속성이나 함수가 있다면 this@OuterClass이름으로 참조한다.

 

 

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

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

    inner.introduceInner()  // Inner Class
    inner.introduceOuter()  // Outer Class

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

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(){
            println(this@Outer.text)
        }
    }
}
728x90
반응형

'Language > Kotlin' 카테고리의 다른 글

[Kotlin] 컬렉션(2) Set과 Map  (0) 2023.09.22
[Kotlin] Data Class와 Enum Class  (0) 2023.09.21
[Kotlin] 함수의 다양한 기능  (0) 2023.09.20
[Kotlin] null 처리와 동일성의 확인  (0) 2023.09.19
[Kotlin] 문자열 함수  (0) 2023.09.18