안드로이드 스터디

코틀린 기본 문법 정리 - 익명클래스와 익명객체

mky 2025. 11. 1. 03:08

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()과 똑같은 역할을 하게 된다.