코틀린의 "객체 식"은 일반적으로 인터페이스나 추상 클래스의 인스턴스를 생성할 때 사용됩니다. 객체 식을 사용하면 익명으로 생성된 객체를 정의하고 해당 객체의 메서드를 구현할 수 있습니다. 객체 식은 Java의 익명 내부 클래스와 유사한 개념이며, 주로 람다나 함수형 인터페이스를 대체하는 데에 사용됩니다.
기본 구조
val myInterfaceImplementation: MyInterface = object : MyInterface {
override fun myFunction() {
println("Implementation of myFunction in object expression")
}
}
위의 코드에서 MyInterface는 인터페이스이며, 해당 인터페이스의 인스턴스를 생성하는 익명의 객체를 정의하고 있습니다.
객체 식의 특징
1. 인터페이스나 추상 클래스의 인스턴스 생성: 주로 객체 식은 인터페이스나 추상 클래스의 인스턴스를 생성하는 데 사용됩니다.
interface MyInterface {
fun myFunction()
}
val myObject: MyInterface = object : MyInterface {
override fun myFunction() {
println("Implementation of myFunction")
}
}
2. 객체 식 내에서 메서드 구현: 객체 식 내부에서는 해당 인터페이스나 추상 클래스의 메서드를 구현할 수 있습니다.
val myObject: MyInterface = object : MyInterface {
override fun myFunction() {
println("Implementation of myFunction")
}
fun additionalFunction() {
println("Additional function in object expression")
}
}
객체 식 내에서 메서드 외에도 추가적인 멤버를 정의할 수 있습니다.
3. 객체 식의 반환 값: 객체 식은 해당 인터페이스나 추상 클래스의 인스턴스를 생성하며, 이 인스턴스는 변수에 할당될 수 있습니다.
val myObject: MyInterface = object : MyInterface {
override fun myFunction() {
println("Implementation of myFunction")
}
}
4. 함수 리터럴과의 비교: 객체 식은 함수 리터럴과 유사하게 생겼지만, 함수 리터럴은 주로 람다식을 의미하며, 객체 식은 인터페이스나 추상 클래스의 인스턴스를 생성하는 데에 사용됩니다.
// 함수 리터럴 (람다식)
val lambdaFunction: () -> Unit = {
println("Lambda function")
}
// 객체 식
val myObject: MyInterface = object : MyInterface {
override fun myFunction() {
println("Implementation of myFunction")
}
}
객체 식은 주로 인터페이스나 추상 클래스를 사용하는 함수형 프로그래밍 패러다임에서 활용되며, 특히 Java에서의 익명 내부 클래스와 유사한 역할을 합니다.
With ChatGPT