티스토리 뷰
728x90
익명 클래스
• class 키워드를 이용하여 명시적으로 선언한 클래스가 아니다.
• 클래스를 한 번만 사용하면 될 때 유용하다.
-> 객체를 하나만 만들고, 바로 쓸 경우.
• 익명 클래스의 인스턴스를 익명 객체라고 한다.
• object 키워드를 사용한다.
• 기존의 클래스를 상속하여 사용하여야 한다. 상속을 명시하지 않은 경우 Any를 상속한다.
- 익명 클래스는 타입이 없기 때문에, 익명 객체의 타입은 익명 클래스가 상속한 부모 클래스이다.
* 클래스 타입은 클래스명으로 만들어지기 때문에 익명 클래스는 타입이 있을 수 없는 듯하다.
• 익명 클래스에서 새로 추가한 멤버는 외부에서 접근할 수 없다.
- 상속받은 멤버를 오버라이드한 것만 외부에서 접근이 가능하다.
- 새로 추가한 멤버는 클래스 내부에서만 사용 가능하다.
* 익명 객체의 타입은 익명 클래스가 상속한 부모 클래스이므로, 익명 클래스에 새로운 멤버를 추가해도 부모 클래스에는 없는 멤버이기 때문에 접근이 불가능 한 듯하다.
// 1. 상속을 명시하지 않을 경우
// 상속을 명시하지 않은 익명 객체 myAnonymousObject -> Any를 상속하게 된다.
val myAnonymousObject = object {
val hello: String = "Hello"
val world: String = "World"
override fun toString(): String { // Any의 toString을 override
return "$hello $world"
}
}
println(myAnonymousObject.toString()) // Hello World 출력
// 2. 상속을 명시할 경우
// 부모 클래스 explicitClass 선언
open class explicitClass(var name: String, var age: Int) {
val asdf: Int = 1234
open fun printMe(): Unit {
println("저는 ${age}살 ${name}입니다.")
}
}
val explicitObject: explicitClass = explicitClass("홍길동", 20)
explicitObject.printMe() // 저는 20살 홍길동입니다. 출력
// explicitClass를 상속하는 익명 클래스의 익명 객체 myAnonymousObject2
val myAnonymousObject2 = object : explicitClass("고길동", 40) {
val gender: String = "남자"
override fun printMe(): Unit { // explicitClass의 printMe를 override
println("나는 ${age}살 ${name}이고, ${gender}다.")
}
}
myAnonymousObject2.printMe() // 나는 40살 고길동이고, 남자다. 출력
println(myAnonymousObject2.gender) // 오류 발생 : myAnonymousObject2는 explicitClass 타입이기 때문에 gender 접근 불가.
728x90
'📱 Android > 💻 Kotlin' 카테고리의 다른 글
[Android/Kotlin] 22. 스코프 함수(Scope Function) (0) | 2022.10.25 |
---|---|
[Android/Kotlin] 20. 인터페이스(Interface) (0) | 2022.10.13 |
[Android/Kotlin] 19. Null Safety (0) | 2022.10.13 |
[Android/Kotlin] 18. 형변환 (0) | 2022.10.13 |
[Android/Kotlin] 17. 상속 (0) | 2022.10.12 |
댓글
공지사항