본문 바로가기
Java & Kotlin/Kotlin

[Kotlin] 중첩 클래스를 다루는 방법

by heekng 2022. 7. 6.
반응형

중첩 클래스를 다루는 방법

중첩 클래스의 종류

  • 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