본문 바로가기
2학년 2학기/모바일 소프트웨어 - 코틀린

Class(1) - 중첩 클래스와 내부 클래스

by kkkkk1023 2024. 10. 1.

 

중첩 클래스 (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