본문 바로가기

kotlin

코틀린 : inner class - Nested Class

=> 다른 클래스 안에 포함된 클래스

=> 외부 클래스 이름. 내부 클래스 이름으로 사용

=> 기본적으로 내부 클래스에서는 외부클래스의 멤버에 접근할 수 없음

=> 내부 클래스를 만들 때 inner를 추가하면 외부 클래스의 멤버에 접근 가능

 

inner 가 추가 되면 내부 클래스의 인스턴스는 클래스 안에서만 생성

=> inner 가 붙지 않은 내부클래스는 static 의 개념이라 외부클래스이름.내부클래스 이름으로 인스턴스를 생성 할 수 있지만 inner가 붙으면 static의 개념이 소멸 되기 때문에 내부클래스의 인스턴스 메소드 안에서만 인스턴스 생성을 해야합니다.

 

=> 안드로이드는 클래스 안에 클래스를 만드는 구조를 많이 사용

이벤트 처리할 때 많이 사용

 

// 외부 클래스
class Button{
    val n : Int = 20
    // 내부 클래스
    class OnClickListener{
        //n = 30 // 일반 내부 클래스에서는 외부클래시의 멤버를 사용 안됨

    }
    inner class OnTouchListener{
        fun myFun{
            n = 30 // inner 클래스 이면 메소드를 생성 해서 외부 클래스의 멤버를 사용 할 수 있음음
       }
    }
}

fun main(args :Array<String>) {
    // Button 클래스의 내부클래스인 OnClickListener 의 인스턴스 생성
    var onClick: Button.OnClickListener =
            Button.OnClickListener()

    var ontouch: Button.OnTouchListener =
            Button.OnTouchListener() //inner class 는 외부에서 인스턴스 생성을 못함함
}