Kotlin - 중첩 클래스

2023. 4. 23. 18:23·📘 Backend/Kotlin

💡 코틀린에서 중첩 클래스를 다루는 법

목차

  • 중첩 클래스의 종류
  • 중첩 클래스와 내부 클래스
  • 정리

💡 중첩 클래스의 종류

클래스 안에 내부 클래스를 만들때는 static클래스를 사용하자.


자바 코드 예시

  • Static을 사용하는 중첩클래스
  • Static을 사용하지 않는 중첩 클래스
    • 내부 클래스 (Inner Class)
    • 지역 클래스 (Local Class)
    • 익명 클래스 (Anonymous Class)

💡중첩 클래스와 내부 클래스

기본적으로 코틀린은 외부 클래스를 참조하지 않는다.

외부 클래스를 참조하고 싶다면 inner 키워드를 추가하고 this@외부클래스를 사용해야한다


자바 코드 예시

내부클래스는 숨겨진 외부 클래스 정보를 가지고 있어 참조를 해지하지 못하는 경우
메모리 누수가 발생할 수 있고, 이를 디버깅하기 어렵다


내부 클래스의 직렬화 형태가 명확하게 정의되어 있지 않아, 직렬화에 있어 제한이 있다.

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 main(String[] args) {
        JavaHouse house = new JavaJouse("제주도");
        System.out.println(house.getLivingRoom().getAddress());
    }
}

코틀린 코드 예시

외부 클래스 참조를 위해 this@외부클래스

class House(
    var address: String,
    var livingRoom: LivingRoom = LivingRoom(10.0)
) {

    // 권장되는 클래스 안의 클래스
    class LivingRoom(
        private var area: Double
    )

    inner class LivingRoom(
        private var area: Double
    ) {
        val address: String
          get() = this@House.address
    }
}

💡 정리

  • 클래스 안에 클래스가 있는 경우 종류는 2가지이다.
    • (Java 기준) static을 사용하는 클래스
    • (Java 기준) static을 사용하지 않는 클래스
  • 권장되는 클래스는 static을 사용하는 클래스이다.

코틀린은 이러한 가이드를 따른다.

  • 클래스 안에 기본 클래스를 사용하면 외부 클래스에 대한 참조가 없다.
  • 외부 클래스를 참조하고 싶으면, inner 키워드를 붙여야 한다.
  • inner class에서 외부 클래스를 참조하려면 this@외부클래스 를 사용해야 한다.
저작자표시 (새창열림)

'📘 Backend > Kotlin' 카테고리의 다른 글

Kotlin - Array & Collections  (0) 2023.04.23
Kotlin - Classes  (0) 2023.04.23
Kotlin - Object  (0) 2023.04.23
Kotlin - Extension Function  (0) 2023.04.23
Kotlin - Access Control  (0) 2023.04.22
'📘 Backend/Kotlin' 카테고리의 다른 글
  • Kotlin - Array & Collections
  • Kotlin - Classes
  • Kotlin - Object
  • Kotlin - Extension Function
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      React #Markdown
      GStreamer #Pipeline
      Lock #Thread #Concurrency
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    Kotlin - 중첩 클래스
    상단으로

    티스토리툴바