1. 중첩 클래스의 종류
자바에서 static을 사용하는 중첩클래스와 사용하지 않은 클래스 두 가지로 나눌 수 있었다.
static을 사용하는 중첩클래스라면 바깥 클래스를 바로 불러올 수 없었지만,
static을 사용하지 않는 중첩클래스라면 바깥 클래스를 바로 불러올 수 있었다.
하지만 이를 권장하지 않고 있다.
왜냐하면, 내부 클래스는 숨겨진 외부 클래스 정보를 가지고 있어, 참조를 해지하지 못하는 경우
메모리 누수가 생길 수 있고, 이를 디버깅하기 어렵기 때문이다.
이렇기 때문에 따라서 자바에서 클래스 안에 클래스를 사용할 때에는 static을 사용하곤 했었다.
이제 그럼 코틀린에서의 중첩클래스와 내부 클래스를 어떻게 구현할 수 있는지 알아보자.
2. 코틀린의 중첩 클래스와 내부 클래스
class JavaHouse(
private val address : String,
private val livingRoom : LivingRoom
){
class LivingRoom(
private val area : Double
//그냥 클래스 만들듯이 편하게 작성하면됨.
//바깥 클래스에 대한 연결이 없는 중첩 클래스가 만들어지기 때문이다.
)
//기본적으로 바깥클래스를 참조하지 않게 되어있음
}
코틀린에서의 내부클래스는 그냥 클래스 만들듯이 편하게 작성하면된다.
왜냐하면 위에서 설명했던 문제때문에 바깥 클래스에 대한 연결이 없는 중첩 클래스가 만들어지기 때문이다!!
그럼 자바에서처럼 static을 사용하지 않음으로써 바깥 클래스에 있는 것을 참조하고 싶을 때는 어떻게할까?
class House(
private val address : String,
private val livingRoom : LivingRoom
){
//권장되지 않은 클래스 안의 클래스
//inner라는 키워드를 직접적으로 붙여줘야함
//바깥 클래스를 참조할때는 this@바깥클래스 이렇게 사용해주어야함
inner class LivingRoom(
private val area : Double
){
val address : String
get() = this@House.address
}
}
위와 같이 inner라는 키워드를 직접적으로 붙여주면 된다!
이는 권장되지 않은 클래스안의 내부클래이며, 바깥 클래스를 참조할 때는 House.이 아닌,
this@House 처럼 this@바깥클래스 이렇게 사용해주어야한다!!!!
'Kotlin > Basic' 카테고리의 다른 글
[Kotlin/Basic] 코틀린에서의 다양한 함수 (1) | 2022.09.16 |
---|---|
[Kotlin/Basic] 코틀린에서의 배열과 컬렉션 (0) | 2022.09.06 |
[Kotlin/Basic] 코틀린에서의 object 키워드 (0) | 2022.08.31 |
[Kotlin/Basic] 코틀린에서의 접근제어 (0) | 2022.08.23 |
[Kotlin/Basic] 코틀린에서의 상속 (0) | 2022.08.22 |