0101011001010111

Android - inner Class 본문

Kotlin/[스스로]Kotlin&안드로이드

Android - inner Class

[진주] 2023. 9. 4. 08:23
728x90
반응형

inner class는 Kotlin에서 특별한 유형의 중첩된 클래스 입니다.

주요 특징 : inner클래스는 바깥쪽 클래스의 인스턴스에 접근 할 수 있다.

 

일반적인 클래스에서 중첩이 될 경우에는, 

클래스 A안에 있는 클래스 B에서는, 

클래스 A의 내용 '감자'의 내용에 직접 접근 할 수 없다. 

 

불러오려면 , 다른 방법을 써야한다.

  1. 생성자를 통한 전달: Class2의 생성자를 통해 Class1의 참조나 필요한 데이터를 전달받을 수 있습니다.
  2. Companion object: Class1 내에 companion object를 정의하면 그 안에 있는 내용은 정적인 내용처럼 동작하므로 Class2에서 직접 접근이 가능합니다.

 

예시 ▼


class Class1 {
    private val class1Value = "Hello from Class1"

    // Class2의 생성자로 Class1의 참조를 전달
    class Class2(class1: Class1) {
        fun display() {
            println(class1.class1Value)
        }
    }

    companion object {
        const val class1StaticValue = "Static value in Class1"
    }
}

fun main() {
    val class1Instance = Class1()
    val class2Instance = Class1.Class2(class1Instance)
    class2Instance.display() // 출력: Hello from Class1

    println(Class1.class1StaticValue) // 출력: Static value in Class1
}

 

 

 

 

하지만, inner class를 사용하면 

클래스 A의 감자 라는 내용을 inner class B에서 직접 접근 가능하다.

 

(바깥쪽 클래스의 private 멤버까지도 접근할 수 있음.)

 

 

예시 ▼

class Outer {
    val name = "OuterClass"

    inner class Inner {
        val name = "InnerClass"

        fun printName() {
            println(this.name)          // prints "InnerClass"
            println(this@Outer.name)   // prints "OuterClass"
        }
    }
}

 

같은 변수의 이름 name을 쓸 경우,

print를 할경우,

 

this.name = > inner 클래스 내부에서 생성된 name을 참조 하므로 Inner Class라고 프린트되고, 

this@Outer.name 을 할 경우,

바로 바깥쪽 클래스인 Outer 클래스를 참조하여 변수 name 을 출력 하면 OuterClass라고 뜨게 된다.

 

 

inner 클래스는 이렇게 바로 바깥쪽 클래스를 쉽게 직접 접근 하기 위해 사용된다.

 

 


 

inner 클래스의 범위 

 

inner 클래스는 자신이 속한 상위 클래스의 참조가 가능하다.

 

다른 클래스로 접근은 어렵다.

예를 들면, 자신의 상위 클래스인 Class A의 내용 감자는 직접 접근할 수 있지만,

자신과 관련이 없는 Class C 의 내용 양파에는 직접 접근할 수 없다.

 

 

 

 

 

 

 

 

728x90
반응형