안드로이드 개발자의 창고
[16일차 Kotlin] 중첩 클래스 본문
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT
📖 중첩 클래스란?
- 클래스안에 만드는 클래스를 중첩 클래스라고 부른다.
- 내부 클래스는 외부 클래스로부터 생성된 객체를 통해서만 객체 생성이 가능하다.
- 내부의 클래스를 가지고 만든 객체는 외부 클래스를 통해 만든 객체가 무조건 있다는 것을 보장받을 수 있기 때문에 외부 클래스에 정의한 멤버의 접근이 자유롭다.
-
외부 클래스는 내부 클래스의 멤버를 자유롭게 사용할 수 없지만 내부 클래스는 외부 클래스의 멤버를 자유롭게 사용할 수 있다.
익명 중첩 클래스
- 이름이 없는 클래스를 익명 중첩 클래스라고 부른다.
- 인터페이스나 추상클래스를 사용할 때 이용한다.
- 인터페이스를 구현한 클래스나 추상 클래스를 상속받은 클래스를 만듬과 동시에 메서드를 Overriding하고 객체를 생성하는 것까지 수행된다.
- 이름이 없으므로 다시는 객체를 생성할 수 없다.
- 만약 클래스를 통해 생성하는 객체가 두 개 이상이면 클래스를 정의하고 객체를 생성해서 사용한다.
📖 일반 중첩 클래스 예제 코드
fun main(){
fun main() {
val obj1 = Outer1()
val obj2 = obj1.Inner1()
obj2.innerMethod() // outerV1 : 100
}
class Outer1{
var outerV1 = 100
fun outerMethod(){
println("Outer1의 outerMethod 입니다")
}
inner class Inner1{
fun innerMethod(){
println("outerV1 : $outerV1")
outerMethod()
}
}
}
✔️코드 리뷰
- obj1은 외부 클래스(Outer1)의 객체이다.
- obj1을 통해 내부 클래스(Inner1)의 객체인 obj2를 생성한다.
- obj2를 통해 innerMethod()를 호출한다.
📖 익명 중첩 클래스 예제 코드
fun main(){
val t1 = TestClass1()
t1.interMethod1()
t1.interMethod2()
val t2 = object : Inter1{
override fun interMethod1() {
println("익명 중첩 클래스의 interMethod1")
}
override fun interMethod2() {
println("익명 중첩 클래스의 interMethod2")
}
}
t2.interMethod1() // 익명 중첩 클래스의 interMethod1
t2.interMethod2() // 익명 중첩 클래스의 interMethod2
}
interface Inter1{
fun interMethod1()
fun interMethod2()
}
class TestClass1 : Inter1 {
override fun interMethod1() {
println("TestClass1의 interMethod1")
}
override fun interMethod2() {
println("TestClass1의 interMethod2")
}
}
✔️ 코드 리뷰
- 익명 중첩 클래스를 사용하지 않는다면 인터페이스를 구현하거나 상속을 받은 다음 메서드를 오버라이딩한 클래스를 만들고 위로 올라가서 객체 생성해 사용해야 한다.
- 해당 코드의 t1이 그 예시이다.
- 만약 인터페이스를 구현하거나 클래스를 상속받은 클래스를 통해 객체를 하나만 생성한다면 익명 중첩클래스를 사용해도 된다.
- 해당 코드의 t2가 그 예시이다.
'Computer > Kotlin' 카테고리의 다른 글
[17일차 Kotlin] Casting(캐스팅) (0) | 2023.05.20 |
---|---|
[16일차 Kotlin] Null 처리(!! 연산자, ?: 연산자, ?. 연산자) (0) | 2023.05.20 |
[16일차 Kotlin] Generic (0) | 2023.05.18 |
[16일차 Kotlin] Data Class (0) | 2023.05.18 |
[16일차 Kotlin] Companion (0) | 2023.05.18 |