익명 객체
인라인으로 구현합니다
익명 객체은(는) 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.