| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
- 임베디드
- Queue
- 아두이노
- Kotlin LinkedList
- 추상화함수
- Kotlin자료구조
- List
- 상태 호이스팅
- 우송대
- 자료구조
- 안드로이드
- Android
- LinkedList
- State Hoisting
- Stack
- Compoae
- 우송대학교
- 라즈베리파이 피코
- deque
- 코틀린
- 컴포즈
- 클래스
- MCU
- kotlinClass
- 큐
- Class
- 리컴포지션
- kotlin
- 재정의함수
- 스택
- Today
- Total
개발자의 생활
중첩 클래스, 내부클래스 본문
Kotlin 에서도 중첩 클래스와 내부클래스 를 사용할 수 있습니다
중첩 클래스 는 클래스 내부에 또다른 클래스를 포함시키는 것입니다. 중첩 클래스는 큰 범위에 속하는 개념으로 내부적으로 다양한 방식이 존재합니다.
1. 중첩 클래스
fun main(){
val inClass = OutClass.InClass("중첩 클래스")
inClass.inClassPrint()
}
class OutClass(
){
class InClass(
private var inValue: String
){
fun inClassPrint(){
println(inValue)
}
}
}
Kotlin 에서 중첩 클래스를 만드는 방법은 아주 간단합니다. 클래스 내부에 동일한 방법으로 클래스를 하나 더 만들어 주면 됩니다.
간단하긴 해도 내부적으로 조금 더 들어가 보겠습니다.
중첩 클래스는 외부클래스에 종속되어 있지 않기 때문에 독립적으로 사용할 수 있습니다. 즉 사용할 때는 외부클래스 의 객체를 생성할 필요없이 독립적으로 객체를 생성할 수 있습니다.
다만 외부 클래스와는 연결할 수 없습니다.
중첩 클래스를 사용하는 이유
이는 하나의 기능을 담당하는 A 라는 클래스가 특별한 기능을 담당하는 B라는 클래스와 강하게 연결되어 있으면서도 B 클래스는 다른 클래스와는 연관성이 전혀 없는 경우 A클래스 내부에 만들어서 연관성을 강하게 나타내기 위함 입니다.
2. 내부 클래스
내부 클래스는 static 이 없는 클래스 입니다. 즉 외부 클래스와 강하게 종속 되어 있다는 것입니다.
그래서 내부클래스 를 만들때는 외부클래스의 인스턴스가 반드시 필요합니다.
그럼 Kotlin 에서 내부클래스 를 만드는 방법은 클래스 앞에 inner 키워드를 붙여주면 됩니다.
실제 코드로 보겠습니다
fun main(){
val outClass = OutClass("외부 클래스")
val inClass = outClass.InClass()
inClass.inClassPrint()
}
class OutClass(
private var outValue: String
){
inner class InClass(
){
fun inClassPrint(){
println(this@OutClass.outValue)
}
}
}
inner 을 붙여주면 컴파일 시 static 없이 클래스만 그대로 생성됩니다.
그러면 위에서 말씀드렸다 싶히 외부 클래스와 강하게 종속되기 때문에 외부 클래스의 필드 와 메서드에 접근할 수 있습니다.
그런데 접근하는 방법이 조금 특이합니다. this@외부클래스명.필드명( this@외부클래스명.메소드명 ) 으로 접근해야 합니다.
사용할때는 객체를 생성한 뒤 인스턴스를 통해 내부클래스 의 객체를 만들어야 합니다.
내부클래스의 위험성
Kotlin 은 기본적으로 내부 클래스는 외부 클래스 를 참조하지 못하게 되어 있습니다.
이는 메모리 누수 를 방지하기 위함 입니다.
메모리 누수가 발생하는 이유는 내부클래스가 외부 클래스의 인스턴스와 연결하고 있기 때문에 외부클래스가 필요가 없어지더라도 내부클래스가 살아있다면 GC가 외부클래스 를 정리하지 못하게 되기 때문입니다.
사실 중첩클래스와 내부클래스 는 많이 사용되지 안는다고 합니다. 그래서 저도 간단하게만 공부하고 넘어가겠습니다.
'kotlin' 카테고리의 다른 글
| Enum Class (0) | 2025.09.14 |
|---|---|
| data class (2) | 2025.09.12 |
| object 키워드(정적 변수, 정적 함수) (1) | 2025.08.31 |
| 상속 (1) | 2025.08.22 |
| class(클래스) (4) | 2025.08.14 |
