English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 글을 통해 예제를 사용하여 내부 클래스와 내부 클래스를 배울 것입니다.
Java와 유사하게, Kotlin은 다른 클래스 내에서 클래스를 정의할 수 있습니다.
class Outer { ... .. ... class Nested { ... .. ... {} {}
내부 클래스는 닫힌 클래스의 외부(Outer) 멤버이므로, . 기호를 사용하여 내부 클래스 및 멤버에 접근할 수 있습니다.
class Outer { val a = "중첩 클래스 외부에서." class Nested { val b = "내부 클래스 내에서 있습니다." fun callMe() = "내부 클래스 내에서 함수 호출" {} {} fun main(args: Array<String>) { //내부 클래스 멤버 접근 println(Outer.Nested().b) //내부 클래스 객체 생성 val nested = Outer.Nested() println(nested.callMe()) {}
프로그램을 실행할 때, 출력은 다음과 같습니다:
내부 클래스 내에서 내부 클래스 내에서 함수 호출
Java 사용자를 위한
Kotlin의 내부 클래스는 Java의 스태틱 내부 클래스와 유사합니다.
Java에서는 다른 클래스 내에서 클래스를 선언하면 기본적으로 내부 클래스가 됩니다. 하지만 Kotlin에서는 inner 접 heads를 사용하여 내부 클래스를 생성해야 합니다. 이를 다음에서 설명하겠습니다.
Kotlin의 내부 클래스는 외부 클래스 인스턴스에 접근할 수 없습니다. 예를 들어,
class Outer { val foo = "내부 클래스 외부에 있습니다." class Nested { //에러! 외부 클래스의 멤버에 접근할 수 없습니다. fun callMe() = foo {} {} fun main(args: Array<String>) { val outer = Outer() println(outer.Nested().callMe()) {}
위 코드는 컴파일되지 않습니다.因为我们试图从嵌套类内部访问外部类的foo属性。
이 문제를 해결하기 위해, inner 키워드를 사용하여 내부 클래스를 생성해야 합니다. 내부 클래스는 외부 클래스에 대한 참조를 가지고 있으며, 외부 클래스의 멤버에 접근할 수 있습니다.
class Outer { val a = "중첩 클래스 외부에서." inner class Inner { fun callMe() = a {} {} fun main(args: Array<String>) { val outer = Outer() println("외부 객체 사용: ${outer.Inner().callMe()}") val inner = Outer().Inner() println("내부 객체 사용: ${inner.callMe()}") {}
프로그램을 실행할 때, 출력은 다음과 같습니다:
외부 객체 사용: 중첩 클래스 외부에서. 내부 객체 사용: 중첩 클래스 외부에서.