코틀린에서는 내포된 클래스(Inner Class)를 사용하여 클래스 내부에 다른 클래스를 정의할 수 있습니다. 내포된 클래스는 외부 클래스의 인스턴스에 종속되며, 내부 클래스는 외부 클래스의 속성에 직접 접근할 수 있습니다. 이를 통해 논리적인 그룹화와 코드 구조를 개선할 수 있습니다.
내포된 클래스는 크게 두 가지 종류가 있습니다: 멤버 내포된 클래스(Member Inner Class)와 스태틱 내포된 클래스(Static Inner Class).
1. 멤버 내포된 클래스 (Member Inner Class)
멤버 내포된 클래스는 외부 클래스의 인스턴스에 종속되며, 내부 클래스는 외부 클래스의 속성에 직접 접근할 수 있습니다.
class OuterClass {
private val outerProperty: Int = 10
inner class InnerClass {
fun accessOuterProperty() {
println(outerProperty)
}
}
}
fun main() {
val outerInstance = OuterClass()
val innerInstance = outerInstance.InnerClass()
innerInstance.accessOuterProperty()
}
- InnerClass는 OuterClass의 인스턴스에 종속되어 생성됩니다.
- inner 키워드는 내포된 클래스를 멤버 내포된 클래스로 지정합니다.
- 외부 클래스의 인스턴스를 통해 내부 클래스의 인스턴스를 생성할 수 있습니다.
2. 스태틱 내포된 클래스 (Static Inner Class)
스태틱 내포된 클래스는 외부 클래스의 인스턴스에 종속되지 않으며, 일반적인 중첩 클래스와 유사합니다.
class OuterClass {
private val outerProperty: Int = 10
class StaticInnerClass {
fun accessOuterProperty() {
// 외부 클래스의 인스턴스에 직접 접근할 수 없음
// println(outerProperty) // 오류 발생
}
}
}
fun main() {
val innerInstance = OuterClass.StaticInnerClass()
innerInstance.accessOuterProperty()
}
- 스태틱 내포된 클래스는 inner 키워드 없이 정의됩니다.
- 외부 클래스의 인스턴스에 직접 접근할 수 없습니다.
사용 시나리오
- 멤버 내포된 클래스는 외부 클래스의 상태에 의존해야 할 때 사용됩니다.
- 스태틱 내포된 클래스는 외부 클래스의 상태에 의존하지 않아도 되며, 일반적으로 독립적인 유틸리티 클래스나 헬퍼 클래스로 사용됩니다.
내포된 클래스를 사용함으로써 코드를 논리적으로 그룹화하고 캡슐화할 수 있으며, 코드 구조를 더욱 명확하게 만들 수 있습니다.
'Kotlin > 포스팅' 카테고리의 다른 글
코틀린 널 가능성 (0) | 2023.12.30 |
---|---|
코틀린 지역 클래스 (0) | 2023.12.30 |
코틀린 멤버 가시성 (0) | 2023.12.29 |
코틀린 생성자 (0) | 2023.12.25 |
코틀린 클래스 내부 구조 (0) | 2023.12.25 |