0Pricing
Kotlin Academy · 강의

익명 객체

인라인으로 구현합니다

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

인라인 구현

익명 객체는 새 클래스에 이름을 지정하지 않고 클래스 또는 인터페이스의 인스턴스를 만듭니다. object 표현식을 사용하십시오.

interface Greeter { fun greet(): String }

fun main() {
    val g = object : Greeter {
        override fun greet() = "Hi"
    }
    println(g.greet())
}

인터페이스 구현하기

객체 표현식을 사용하면 필요한 위치에서 하나 이상의 인터페이스를 바로 구현할 수 있습니다.

interface Clickable { fun click() }

fun main() {
    val button = object : Clickable {
        override fun click() = println("Clicked")
    }
    button.click()
}

클래스 멤버 재정의하기

open 클래스를 익명으로 서브클래싱하고 멤버를 재정의할 수 있습니다.

open class Animal { open fun sound() = "..." }

fun main() {
    val cat = object : Animal() {
        override fun sound() = "Meow"
    }
    println(cat.sound())
}

추가 상태 보유하기

익명 객체는 재정의한 멤버 외에 자체 속성을 선언할 수 있습니다.

fun main() {
    val point = object {
        val x = 3
        val y = 4
    }
    println("${point.x}, ${point.y}")
}

상위 타입이 없는 객체

상위 타입을 생략하면 객체는 멤버를 임시로 묶은 것일 뿐이며, 빠르게 로컬 그룹을 만들 때 유용합니다.

fun main() {
    val config = object {
        val retries = 3
        val timeout = 30
    }
    println(config.retries)
}

로컬 변수 캡처하기

익명 객체는 정적 중첩 클래스와 달리 자신을 둘러싼 범위의 변수를 캡처할 수 있습니다.

fun makeCounter(start: Int): () -> Int {
    var count = start
    val obj = object {
        fun next() = count++
    }
    return { obj.next() }
}

fun main() {
    val c = makeCounter(10)
    println(c())
    println(c())
}

리스너로 사용하기

인라인 구현을 콜백이나 리스너로 전달하는 것이 일반적인 사용 방법입니다.

interface OnDone { fun done(result: Int) }

fun compute(cb: OnDone) {
    cb.done(42)
}

fun main() {
    compute(object : OnDone {
        override fun done(result: Int) = println("Got $result")
    })
}

익명 객체의 타입

함수에서 반환할 때 추론되는 타입은 선언된 상위 타입이며, 상위 타입이 없으면 Any입니다. 추가 멤버는 로컬 범위에서만 표시됩니다.

interface Named { val name: String }

fun make(): Named = object : Named {
    override val name = "X"
}

fun main() {
    println(make().name)
}

익명 객체와 람다 비교

단일 메서드 인터페이스에는 람다가 더 짧지만, 여러 멤버를 재정의하거나 상태를 보유해야 할 때는 익명 객체가 필요합니다.

interface Handler {
    fun onStart()
    fun onStop()
}

fun main() {
    val h = object : Handler {
        override fun onStart() = println("start")
        override fun onStop() = println("stop")
    }
    h.onStart()
    h.onStop()
}

객체 표현식과 객체 선언 비교

객체 표현식은 사용할 때마다 새로운 인스턴스를 만듭니다. 객체 선언(object Name {})은 이름이 있는 싱글턴입니다. 둘은 비슷해 보이지만 수명이 다릅니다.

object Singleton { val id = 1 }

fun main() {
    val fresh = object { val id = 2 }
    println(Singleton.id)
    println(fresh.id)
}

간결한 비교기

익명 객체는 한 번만 사용하는 비교기나 전략을 만들 때 편리합니다.

fun main() {
    val cmp = object : Comparator<Int> {
        override fun compare(a: Int, b: Int) = b - a
    }
    val list = listOf(1, 3, 2).sortedWith(cmp)
    println(list)
}

빠른 확인

익명 객체에 대한 이해도를 확인해 보십시오.

복습

익명 객체에 대해 다음을 배웠습니다.

  • object : Type {} 표현식은 이름이 없는 인스턴스를 만듭니다.
  • 인터페이스를 구현하고, open 클래스를 서브클래싱하며, 상태를 보유할 수 있습니다.
  • 자신을 둘러싼 로컬 변수를 캡처합니다.
  • 여러 메서드가 필요한 콜백에는 익명 객체를 사용하고, 단일 메서드에는 람다를 우선 사용하십시오.
interface Run { fun go() }

fun main() {
    val r = object : Run { override fun go() = println("go") }
    r.go()
}

자주 묻는 질문

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

네 — “익명 객체” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 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. 중첩 클래스
  2. 내부 클래스
  3. 익명 객체
  4. 지역 클래스
← Kotlin Academy(으)로 돌아가기