반응형
중첩 클래스를 다루는 방법
중첩 클래스의 종류
- Java 기준
static
을 사용하는 중첩 클래스: 클래스 안에static
을 붙인 클래스, 밖의 클래스를 직접 참조하지 못한다. - Java 기준
static
을 사용하지 않는 중첩 클래스내부 클래스(Inner Class)
: 클래스 안의 클래스, 밖의 클래스를 직접 참조할 수 있다.지역 클래스(Local Class)
: 메서드 내부에 클래스를 정의익명 클래스(Anonymous Class)
: 일회성 클래스
코틀린의 중첩 클래스와 내부 클래스
Java
public class JavaHouse {
private String address;
private LivingRoom livingRoom;
public JavaHouse(String address, LivingRoom livingRoom) {
this.address = address;
this.livingRoom = livingRoom;
}
public LivingRoom getLivingRoom() {
return livingRoom;
}
public static class LivingRoom {
private double area;
public LivingRoom(double area) {
this.area = area;
}
}
}
Kotlin
class House(
private val address: String,
private val livingRoom: LivingRoom
) {
class LivingRoom(
private val area: Double
)
}
class House2(
private val address: String,
private val livingRoom: LivingRoom
) {
inner class LivingRoom(
private val area: Double
) {
val address: String
get() = this@House2.address
}
}
- 내부 클래스는 숨겨진 외부 클래스 정보를 가지고 있어, 참조를 해지하지 못하는 경우 메모리 누수가 생길 수 있고, 이를 디버깅 하기 어렵다.
또한 내부 클래스의 직렬화 형태가 명확하게 정의되지 않아 직렬화에 한계가 있다.
그러므로 클래스 내에 클래스를 만들 때에는static
을 사용하라 - 코틀린에서는 기본적으로 바깥 클래스를 참조하지 않는다.
- 바깥 클래스를 참조하고 싶다면
inner
키워드를 추가한다.- 그리고
this@바깥클래스
를 사용한다.
- 그리고
- 자바에서
클래스 안의 static 클래스
는 코틀린에서클래스 안의 클래스
로 사용되고 - 자바에서
클래스 안의 클래스
는 코틀린에서클래스 안의 inner 클래스
로 사용된다.
반응형
'Java & Kotlin > Kotlin' 카테고리의 다른 글
[Kotlin] 함수 (0) | 2022.07.07 |
---|---|
[Kotlin] 배열과 컬렉션 (0) | 2022.07.07 |
[Kotlin] Data, Enum, Sealed 클래스 (0) | 2022.07.06 |
[Kotlin] object를 다루는 방법 (0) | 2022.07.06 |
[Kotlin] 접근제어를 다루는 방법 (0) | 2022.07.06 |
[Kotlin] 상속을 다루는 방법 (0) | 2022.07.06 |