728x90
중첩 클래스의 종류
- 내부 클래스
- 외부 클래스를 참조하고 있다.
- 내부 클래스는 숨겨진 외부 클래스 정보를 가지고있어서 참조를 해지하지 못하는 경우가 발생할 수 있다. 따라서 메모리 누수가 생길 수 있고, 이를 debugging 하기 어렵다.
- 내부 클래스의 직렬화 형태가 명확하게 정의되지 않아 직렬화에 있어 제한이 있다.
public class JavaHouse {
private String address;
private LivingRoom livingRoom;
public JavaHouse(String address) {
this.address = address;
this.livingRoom = new LivingRoom(10);
}
public LivingRoom getLivingRoom() {
return livingRoom;
}
public class LivingRoom {
private double area;
public LivingRoom(double area) {
this.area = area;
}
public String getAddress() {
return JavaHouse.this.address;
}
}
}
public static void main(String[] args) {
JavaHouse javaHouse = new JavaHouse("서울시");
System.out.println(javaHouse.getLivingRoom().getAddress());
}
- static 클래스
- 외부 클래스를 바로 불러올 수 없다.
- 클래스 안에 클래스를 만들어야 할때는 static 클래스를 사용해야 한다.
- Kotlin에서는 이 가이드를 충실하게 따르고 있다.
코틀린의 중첩 클래스와 내부 클래스
- 자바의 static 중첩 클래스 (default)
- 기본적으로 바깥 클래스에 대한 연결이 없는 중첩 클래스가 만들어진다.
class House(
private val address: String,
private val livingRoo: LivingRoom
) {
class LivingRoom(
private var area: Double
)
}
- 자바의 내부 클래스
- 바깥 클래스 참조를 위해 this@바깥클래스를 사용한다.
class House2(
private val address: String
){
inner class LivingRoom(
private val area: Double
){
val address: String
get() = this@House2.address
}
}
fun main() {
println(House2("서울시").LivingRoom(12.0).address)
}
정리
- 클래스 안의 클래스(default) : 바깥 클래스 참조가 없다. 권장되는 유형
- 클래스 안의 inner 클래스 : 바깥 클래스 참조가 있다.
728x90
'Language > kotlin' 카테고리의 다른 글
Enum, Sealed Class - 공통점, 차이점 정리 (0) | 2023.05.23 |
---|---|
다양한 클래스 다루기 (0) | 2023.05.23 |
object 키워드 다루기 (0) | 2023.05.22 |
접근 제어 다루기 (0) | 2023.05.22 |
상속 다루기 (0) | 2023.05.22 |