코틀린이나 자바로 클래스를 정의할 경우 클래스 내부에 클래스를 다시 정의해야 하는 경우가 있습니다.
코틀린은 자바와 동일하게 최상위 클래스 내부에 클래스를 다시 배치할 수 있는 중첩 클래스(neted class)를 지원합니다.
중첩 클래스(neted class)
class nested{
private val value:Int = 0
class In{
fun foo() = 7
}
}
클래스 내부에 함수를 다른 클래스에 정의해서 접근할 수 있습니다.
nested class 내부에 In class를 정의하고 foo 메서드를 사용해서 멤버에 접근이 가능합니다.
nested.In().foo() 메서드를 사용해서 멤버 정보를 출력할 수 있습니다.
출력 결과 멤버에 저장된 7을 출력하게 됩니다.
중첩 클래스(neted class)에서 최상위 클래스에 정의된 인스턴스 변수나 메서드에 직접 접근이 불가능합니다.
중첩된 내부 클래스를 사용해서 객체 참조가 가능합니다.
class nested{
private val value:Int = 0
class In{
fun foo() = 7
}
inner class innerIn{
fun foo2() = 20
}
}
코틀린(Kotlin) 중첩 클래스(neted class)에서 내부 클래스를 직접 접근하기 위해서는 inner 한정자를 사용해서 클래스를 정의하면 됩니다.
innerIn class는 inner로 정의 되었기 때문에 직접 foo2 메서드에 접근이 가능합니다.
nested를 선언하고 innerIn class에 직접 접근할 수 있습니다.
출력 결과 foo2 메서드에서 설정한 20을 확인할 수 있습니다.
중첩 클래스(neted class)는 내부 클래스를 직접 참조하거나, 간접적으로 참조할 수 있는 구조로 정의가 가능합니다.
Outer 클래스의 인스턴스를 먼저 만들어서 Inner 클래스를 접근하게 되면 모든 Outer 클래스를 멤버를 참조할 수 있어 하나의 인스턴스처럼 사용이 가능합니다.
감사합니다.
'IT 나라 > 코틀린(Kotlin)' 카테고리의 다른 글
[ Kotlin ] 코틀린 갤러리 뷰 이미지 이벤트 확인하기 (0) | 2021.05.06 |
---|---|
[ Kotlin ] 코틀린 android 함수 형식 (0) | 2021.04.08 |
[ Kotlin ] 코틀린 android Sealed Class 사용법 (0) | 2021.03.23 |
[ Kotlin ] 코틀린 android Enum Class 사용법 (0) | 2021.03.22 |
코틀린 | Kotlin android Data Class 사용법 (0) | 2021.03.20 |