익명클래스(Anonymous Class)
- 객체를 이름 없이 생성하는 방식
- 인터페이스나 추상 클래스를 일시적으로 구현하거나 확장
- Java의 익명 내부 클래스와 비슷한 개념
개념
- 이름이 없는 클래스
- 일회성으로 필요한 동작을 정의할 때 사용
- e.g.) 리스너, 콜백, 인터페이스 구현
사용 예시
- 버튼 클릭 이벤트 리스너를 설정할 때
- 일회용 객체가 필요할 때
- 콜백 처리를 간단하게 하고 싶을 때
예시
interface ClickListener {
fun onClick()
}
val listener = object: ClickListener {
override fun onClick() {
println("Clicked!")
}
}
listener.onClic() // 출력: Clickced!
- object: ClickListner { … }는 ClickListner를 구현한 익명 객체를 생성하는 코드
- 이 객체는 이름이 없으며 변수 listener에 담겨 사용
사용 조건
- 인터페이스 또는 추상 클래스를 기반으로 생성
- 반드시 필요한 함수 구현: 추상 멤버 등
대체 - 람다 함수
- 익명 클래스를 람다로 대체 가능
- SAM 인터페이스를 람다로 대체 가능
- Kotlin은 다음 조건을 만족하면 람다를 익명 클래스로 자동 변환
- 자바 인터페이스: fun interface도 가능
- 함수가 하나만 존재: Single Abstract Method
예시
[SAM 인터페이스]
val thread = Thread(object: Runnable {
override fun run() {
println("Runnign in thread")
}
})
[람다]
val thread = Thread {
println("Running in thread")
}
차이점
- 람다는 함수 / 익명 클래스는 객체(Object)
차이점 | 익명 클래스 | 람다 |
this | 익명 클래스 자기 자신 | 외부 클래스 |
상태 보유 | 필드나 멤버 소유 가능 | 없음(stateless) |
여러 메서드 | 여러 개 구현 가능 | 불가능(하나만 표현) |
- 익명 클래스 대신 람다를 사용할 수 있는 경우는 제한적!
- 함수가 하나의 인터페이스, SAM 인터페이스 일때만 사용 가능
- Kotlin이 자동으로 람다 → 익명 객체로 변환
'개발새발 > 코틀린' 카테고리의 다른 글
[코틀린/Kotlin] qualifiedName (0) | 2025.09.06 |
---|---|
[코틀린/Kotlin] 로컬 클래스(Local Class) (1) | 2025.09.05 |
[코틀린/Kotlin] is, as, as? (0) | 2025.09.03 |
[코틀린/Kotlin] 구체화(reifeid) (0) | 2025.09.02 |
[코틀린/Kotlin] 메모이제이션(Memoization) (0) | 2025.09.02 |