0Pricing
Kotlin Academy · 강의

익명 객체와 객체 식

객체 식으로 인터페이스의 일회성 구현을 만들어 보세요.

익명 객체와 객체 식은(는) CoddyKit의 무료 Kotlin Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Kotlin Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

객체 표현식

객체 표현식은 클래스나 인터페이스의 익명 일회성 인스턴스를 생성합니다. Java의 익명 내부 클래스에 해당하지만 더 강력합니다.

익명으로 인터페이스 구현하기

object : Interface { ... }를 사용하면 인라인 구현을 생성할 수 있습니다.

interface ClickListener {
    fun onClick(): String
}
fun main() {
    val listener = object : ClickListener {
        override fun onClick() = "clicked!"
    }
    println(listener.onClick())
}

상태를 가진 익명 클래스

익명 객체는 상태를 보유하고 여러 메서드를 가질 수 있습니다.

fun main() {
    val counter = object {
        var count = 0
        fun inc() { count++ }
        fun show() = println("count = $count")
    }
    counter.inc(); counter.inc(); counter.inc()
    counter.show()
}

익명 객체의 타입

익명 객체의 타입은 추론됩니다. 함수 수준에서 선언하면 사용자 정의 멤버에도 계속 접근할 수 있습니다.

fun main() {
    val pair = object {
        val left = "L"
        val right = "R"
    }
    println("${pair.left} and ${pair.right}")
}

익명 타입 노출

익명 객체를 추론된 타입으로 함수에서 반환하면 호출자는 상위 타입만 볼 수 있으므로, 익명 객체에 추가된 요소에는 외부에서 접근할 수 없습니다.

fun makeListener() = object {
    fun greet() = "hello"
}
fun main() {
    val l = makeListener()
    println(l.greet()) // OK — same compilation unit
}

여러 인터페이스

익명 객체 하나가 하나의 표현식에서 여러 인터페이스를 구현할 수 있습니다.

interface Closeable { fun close() }
interface Flushable { fun flush() }
fun main() {
    val resource = object : Closeable, Flushable {
        override fun close() = println("closed")
        override fun flush() = println("flushed")
    }
    resource.flush()
    resource.close()
}

클래스 확장하기

익명 객체는 상속 가능한 클래스를 확장하면서 멤버를 재정의할 수 있습니다.

open class Animal(val name: String) {
    open fun speak() = "$name makes a sound"
}
fun main() {
    val pet = object : Animal("Rex") {
        override fun speak() = "$name barks!"
    }
    println(pet.speak())
}

둘러싼 변수 캡처

익명 객체는 둘러싼 범위의 변수를 캡처하여 읽고 수정할 수 있습니다. Java에서 final이 필요하다는 요구 사항과는 다릅니다.

fun main() {
    var log = mutableListOf<String>()
    val recorder = object {
        fun record(s: String) { log.add(s) }
    }
    recorder.record("event 1")
    recorder.record("event 2")
    println(log)
}

익명 객체를 사용할 때

자체 클래스를 만들 정도는 아닌 일회성 구현에 익명 객체를 사용합니다. 일반적으로 콜백, 리스너, 비교기 등에 활용합니다.

fun main() {
    val nums = listOf(3, 1, 4, 1, 5, 9, 2, 6)
    val sorted = nums.sortedWith(object : Comparator<Int> {
        override fun compare(a: Int, b: Int) = b - a // descending
    })
    println(sorted)
}

가능하면 람다 우선

인터페이스에 단일 추상 메서드(SAM)만 있다면 객체 표현식보다 람다가 더 간결합니다.

fun main() {
    val nums = listOf(3, 1, 4, 1, 5, 9)
    // Old way:
    val sorted1 = nums.sortedWith(object : Comparator<Int> {
        override fun compare(a: Int, b: Int) = b - a
    })
    // New way — SAM conversion:
    val sorted2 = nums.sortedWith(Comparator { a, b -> b - a })
    println("$sorted1 / $sorted2")
}

익명 객체와 선언된 객체

이름 있는 싱글턴에는 object Name을 사용합니다. 일회성 익명 인스턴스에는 표현식에서 object : Type을 사용합니다.

// Named singleton (one instance, accessed globally)
object GlobalLogger { fun log(m: String) = println("[L] $m") }
// Anonymous (created at expression evaluation)
fun main() {
    val local = object { fun hi() = "hi" }
    GlobalLogger.log("hello")
    println(local.hi())
}

빠른 확인

인터페이스를 인라인으로 구현하는 익명 인스턴스를 생성하는 구문은 무엇인가요?

요약

객체 표현식은 인라인으로 일회성 익명 인스턴스를 생성합니다. 인터페이스를 구현하고, 클래스를 확장하며, 상태를 보유하고, 둘러싼 변수를 캡처할 수 있습니다. 단일 메서드 인터페이스에는 람다를 우선하고, 여러 메서드나 상태가 필요할 때 객체 표현식을 사용합니다.

자주 묻는 질문

“익명 객체와 객체 식” 강의는 무료인가요?

네 — “익명 객체와 객체 식” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Kotlin Academy 강의 전체를 잠금 해제할 수 있습니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“익명 객체와 객체 식”에서 뭘 배우나요?

객체 식으로 인터페이스의 일회성 구현을 만들어 보세요. 브라우저에서 직접 실행하는 실습 코드로 Kotlin Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Kotlin Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Kotlin Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“익명 객체와 객체 식” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Kotlin Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Kotlin Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. object 선언: Kotlin 싱글턴
  2. companion object: Kotlin의 정적 멤버와 유사한 요소
  3. 익명 객체와 객체 식
  4. companion object를 사용한 팩토리 메서드
← Kotlin Academy(으)로 돌아가기