1. 익명 객체란?
익명 객체란 익명 클래스로부터 생성되는 객체를 뜻한다. 익명 클래스는 다른 클래스들과 달리 이름을 가지지 않는 클래스다. 정리하면 이름을 가지지 않는 익명 클래스로부터 익명 객체를 생성할 수 있다.
2. 익명 객체가 필요한 이유
익명 객체는 클래스가 한 번만 활용되어야 하는 경우에 매우 유용하다. 만약 한 번만 활용되어야 하는데 매번 클래스를 생성하면 너무 클래스가 많아지는 불편함이 있기 때문이다.
예를 들어 아래와 같은 인터페이스가 있다.
interface ButtonClickListener {
fun onButtonClicked();
}
그리고 버튼 클래스를 만들어 보자.
class Button(private val buttonClickListener: ButtonClickListener) {
fun buttonClickCallback() {
buttonClickListener.onButtonClicked()
}
}
버튼에서는 ButtonClickListener 인터페이스를 버튼 클릭시 콜백 작업에 활용하기 위해 사용한다. 따라서 ButtonClickListener 인터페이스를 구현하는 어떤 클래스의 객체라도 저 buttonClickListener 자리에 올 수 있다. 그렇다면 이번엔 ButtonClickListener 인터페이스를 구현한 클래스를 만들어보자.
class OKButtonClickListener : ButtonClickListener {
override fun onButtonClicked() {
println("OK Clicked")
}
}
이 클래스의 객체는 Button에 다음과 같이 들어갈 수 있다.
fun main() {
Button(OKButtonClickListener())
}
그런데 여기서 개선할 점이 있다. 만약 이 OkButtonClickListener객체가 이 버튼에서만 활용된다면, OkButtonClickListener클래스를 하나 더 생성하는 것보다 바로 저 자리에 작성해 생성하는 것이 유용하지 않을까? 여기서 오늘의 이야기가 시작된다.
3. 익명 객체(익명 클래스) 구현하기
우선 클래스의 구현 방식을 복습해 보자

다음과 같이 구현할 수 있다.

클래스와 매우 유사하지 않은가? 클래스와 다른 점은 class[클래스명] 대신에 object가 들어갔다는 것이다. object 키워드가 클래스의 역할을 한다. 즉 object는 이름이 없는 클래스라 해서 익명 클래스라 불린다.
또한 이렇게 생성된 익명클래스는 바로 자기자신을 객체로 생성한다. 이 객체 또한 이름이 없으므로 이는 무명 객체라 불린다.
따라서 위의 OkButtonClickListener() 객체와 같은 역할을 하는 무명 객체는 다음과 같이 만들 수 있다.
object : ButtonClickListener {
override fun onButtonClicked() {
println("OK Clicked")
}
}
4. 익명 객체 사용하기
이제 위의 Button의 파라미터 자리에 만든 무명 객체를 넣어보자. 이 무명객체는 위의 OkButtonClickListener()과 똑같은 역할을 하게 된다.
'안드로이드 스터디' 카테고리의 다른 글
| RecyclerView를 써 보자! (0) | 2025.11.02 |
|---|---|
| 뷰페이저2를 만들어 보고 탭 레이아웃과 연동시켜보자! (0) | 2025.11.01 |
| HomeFragment.kt 분석 (0) | 2025.11.01 |
| 메인액티비티 코드 분석 (0) | 2025.11.01 |
| 코틀린 기본 문법 정리 - 상속, 인터페이스 (0) | 2025.11.01 |