자바의 내부 클래스
- 자바의 클래스 내부에서 다른 클래스를 정의하면
- 기본적으로 내부 클래스가 된다.
- 내부클래스는 외부 클래스에 대한 인스턴스 참조를 자동으로 가지게 된다.
코틀린에서의 내부 클래스
- 외부 클래스와 내부 클래스는 서로 접근 권한이 없다
- 코드의 캡슐화나 정의를 사용하는 곳에 가깝게 두는 것에 유용한 편이다.
중첩 클래스의 사용 예제
- View 인터페이스와 State 인터페이스를 예로
- View 의 상태를 직렬화하는 경우에 중첩 클래스를 사용하면 편리하다.
- Button 클래스의 상태를 저장하는 클래스는 Button 클래스의 내부에 선언하면 편리하다.
- State 인터페이스를 구현한 ButtonState 클래스를 정의하여 Button에 대한 구체적인 정보를 저장한다.
class Button : View {
override fun getCurrentState(): State = ButtonState()
override fun restoreState(state: State) {
super.restoreState(state)
}
class ButtonState : State { /*...*/ }
}
interface View {
fun getCurrentState(): State
fun restoreState(state: State) {}
}
interface State : Serializable
중첩 클래스와 내부 클래스의 차이점
- 코틀린의 중첩 클래스는 자바의 static 중첩 클래스와 동일하다
- 바깥 클래스에 대한 참조를 포함하지 않는다.
- 내부 클래스로 변경하려면 inner 키워드를 사용하며, 바깥 클래스에 대한 참조롤 포함하게 된다.
class Outer {
inner class Inner {
fun getOuterReference(): Outer = this@Outer // 바깥 클래스 참조에 접근
}
}
class Outer2 {
class Inner {
fun getOuterReference(): Outer2? = null // 바깥 클래스 참조에 접근 불가능하다.
}
}
Uploaded by N2T
'코틀린 > 코틀린인액션' 카테고리의 다른 글
[코틀린인액션] 상속 제어 변경자 (0) | 2023.12.17 |
---|---|
[코틀린인액션] 가시성 변경자 및 접근 제어 (0) | 2023.12.17 |
[코틀린인액션] 3중 따옴표 문자열 (0) | 2023.12.09 |
[코틀린인액션] 로컬 함수를 사용하여 코드 중복 제거 (0) | 2023.12.09 |
[코틀린인액션] 인터페이스 정의 및 구현 (0) | 2023.12.09 |