본문 바로가기

코틀린에서의 OOP - 5. 중첩 클래스

@silver-w2025. 10. 7. 18:43
  1. 중첩 클래스의 종류
  2. 코틀린의 중첩 클래스와 내부 클래스
 - (자바) 중첩 클래스 중 권장되는 클래스는 static을 사용하는 클래스이며
 - 코틀린에서는 권장되는 중첩 클래스를 사용하기 위해 기본적으로 바깥 클래스에 대한 참조가 없으며
 - 바깥 클래스를 참조하고 싶으면 『inner 키워드 + this@바깥클래스』를 사용해야 한다.

더보기

1 . 중첩 클래스의 종류

 

① static을 사용 static을 사용하지 않음
  내부 클래스 지역 클래스  익명 클래스

① 클래스 안에 static을 붙인 클래스, 밖의 클래스 직접 참조 불

② 클래스 안에 클래스, 밖의 클래스를 직접 참조

③ 매서드 내부에 클래스를 정의

④ 일회성 클래스



→ 보통 중첩 클래스(클래스 안에 클래스가 중첩된 클래스)는 ①과 ②를 뜻한다

2 . 자바에서의 중첩 클래스와 내부 클래스

1)  자바에서의 중첩클래스(static x)

package house;

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 int area;

        public LivingRoom(int area) {
            this.area = area;
        }

        public String getAddress() {
            return JavaHouse.this.address;	// 바깥 클래스와 연결되어 있다.
        }
    }
}

1-1) 호출
 - 바깥 클래스 호출 하는 함수를 사용할 수 있음.

new JavaHouse("제주도").getLivingRoom().getAddress();


2)  자바에서의 중첩클래스(static o)
 - 중첩 클래스에 static을 붙이면 바깥 클래스를 바로 불러올 수 없다.

   (static 인스턴스와 아닌 것의 인스턴스 메모리 적재 위치를 생각하면 이해하기 쉽다)





내부 클래스가 외부 클래스를 참조하며 생기는 몇가지 문제점이 있다.

1. 내부 클래스는 숨겨진 외부 클래스 정보를 가지고 있어, 참조를 해지하지 못하는 경우 메모리 누수가 생길 수 있고, 이를 디버깅 하기 어렵다.
2. 내부 클래스의 직렬화 형태가 명확하게 정의되지 않아 직렬화에 있어 제한적이다.

 ★ 그러므로 기본적으로 바깥 클래스를 참조하지 않는 것이 권장된다.
  - 코틀린에서는 이러한 Guide를 따르고 있다, 기본적으로 바깥 클래스를 참조하지 않으며, 바깥 클래스를 참조하고 싶다면 inner 키워드를 추가해야한다.

3 . 코틀린의 중첩 클래스와 내부 클래스

□ 코틀린에서 권장되는 클래스 안의 클래스를 만드는 방법

class House (
    private val address: String,
    private val livingRooms: LivingRoom
){
    class LivingRoom(
        private val area: Double
    )
}

 → 기본적으로 코틀린에서는 바깥 클래스에 대한 연결이 없는 중첩 클래스가 만들어진다.

 
□ 코틀린에서 권장되지 않는 클래스 안의 클래스를 만드는 방법(내부 클래스가 바깥 클래스 참조)

class House (
    private val address: String,
    private val livingRooms: LivingRoom
){
    inner class LivingRoom(				// inner 키워드 사용
        private val area: Double
    ) {
        val address: String
            get() = this@House.address	// 자바에서는 House.this.address 부분.
    }
}

 - 내부 클래스에 inner 키워드 사용
 - 바깥 클래스를 참조할 때는 『this@바깥클래스명』을 사용

 

설명 자바 코틀린
(권장) 바깥 클래스
참조 없음
클래스 안의 static 클래스 클래스 안의 클래스 (기본)
바깥 클래스
참조함
클래스 안의 클래스 클래스 안의 inner 클래스

 

※ (intellij) 코틀린 코드 자바로 변환
tool > Kotlin > Show Kotlin Bytecode


출처 : https://inf.run/sMPv5

 

자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)| 최태현 - 인프런 강의

현재 평점 5.0점 수강생 3,550명인 강의를 만나보세요. 이 강의를 통해 Kotlin 언어의 특성과 배경, 문법과 동작 원리, 사용 용례, Java와 Kotlin을 함께 사용할 때에 주의할 점 등을 배울 수 있습니다. Ko

www.inflearn.com

silver-w
@silver-w :: silver-w 님의 블로그

silver-w 님의 블로그 입니다.

공감하셨다면 ❤️ 구독도 환영합니다! 🤗

목차