중첩 클래스 (Nested Class)
inner
키워드 없이 클래스 내부에 선언된 클래스를 중첩 클래스라고 합니다.- 중첩 클래스는 외부 클래스와 독립적입니다. 즉, 중첩 클래스는 외부 클래스의 인스턴스에 접근할 수 없습니다.
- 외부 클래스와 상관없이 단독으로 인스턴스화할 수 있습니다.
예시:
class Outer {
val outerValue = "Outer Class"
// 중첩 클래스
class Nested {
fun nestedFunction() = "Nested Class"
}
}
fun main() {
// 중첩 클래스는 외부 클래스의 인스턴스 없이도 사용 가능
val nested = Outer.Nested()
println(nested.nestedFunction()) // 출력: Nested Class
println(nested.outerValue) //오류 발생
}
특징:
Outer.Nested()
처럼 외부 클래스의 인스턴스 없이도 중첩 클래스를 바로 인스턴스화할 수 있습니다.- 외부 클래스의 멤버에는 접근할 수 없습니다. 예를 들어,
nestedFunction
에서는outerValue
에 접근할 수 없습니다.
내부 클래스 (Inner Class)
inner
키워드를 사용해 선언한 클래스는 내부 클래스라고 합니다.- 내부 클래스는 외부 클래스의 인스턴스에 대한 참조를 가지고 있습니다. 즉, 외부 클래스의 멤버에 접근할 수 있습니다.
- 내부 클래스를 사용하려면 외부 클래스의 인스턴스가 반드시 필요합니다.
예시:
class Outer {
val outerValue = "Outer Class"
// 내부 클래스
inner class Inner {
fun innerFunction() = "Inner Class accessing: $outerValue"
}
}
fun main() {
val outer = Outer() // 외부 클래스의 인스턴스 생성
val inner = outer.Inner() // 내부 클래스는 외부 클래스 인스턴스에 종속
println(inner.innerFunction()) // 출력: Inner Class accessing: Outer Class
}
특징:
- 내부 클래스는 외부 클래스의 인스턴스에 연결되며,
inner
키워드를 통해 외부 클래스의 멤버에 접근할 수 있습니다. innerFunction
은 외부 클래스의 프로퍼티인outerValue
를 사용할 수 있습니다.- 내부 클래스를 인스턴스화할 때는 외부 클래스의 인스턴스가 필요하므로,
outer.Inner()
와 같은 방식으로 인스턴스화합니다.
중첩 클래스와 내부 클래스의 차이점
구분 | 중첩 클래스 (Nested Class) | 내부 클래스 (Inner Class) |
---|---|---|
inner 키워드 |
없음 | 있음 |
외부 클래스 인스턴스 | 필요 없음 | 필요함 |
외부 클래스 멤버 접근 | 불가능 | 가능 (외부 클래스의 프로퍼티와 메소드에 접근 가능) |
사용 방법 | Outer.Nested() |
outer.Inner() |
독립성 | 외부 클래스와 독립적 | 외부 클래스에 종속됨 |
'2학년 2학기 > 모바일 소프트웨어 - 코틀린' 카테고리의 다른 글
고차함수(1) - 선언과 사용 (0) | 2024.10.10 |
---|---|
Kotiln - 함수 (0) | 2024.10.10 |
Class(1) - 추상 클래스와 인터페이스 (0) | 2024.10.01 |
Class(1) - 상속 (0) | 2024.10.01 |
Class(1) - getter, setter (0) | 2024.10.01 |