반응형
object와 class
코틀린에서 클래스를 정의하는 키워드는 class 이다. 하지만 간혹 object 키워드를 이용하여 클래스를 정의하는것을 종종 볼 수 있다. object 키워드를 이용하여 클래스를 정의하면, 싱글턴 패턴이 적용되어 객체가 한번만 생성되도록 한다.
object키워드는 이러한 싱글톤을 사용하는 방법 이외에도 익명객체를 생성할 때도 사용된다.
위 내용을 정리하면 object 키워드는 다음과 같은 두가지 용도로 사용된다.
1. 싱글턴 클래스를 만들때
2. 익명 클래스 객체를 생성할 때
1. object키워드를 이용하여 싱클턴 클래스 만들기
object로 싱클턴 클래스를 정의할 수 있다. 아래 코드처럼 CarFactory 클래스를 만들때 class 키워드 대신 object 키워드를 사용하면 이 클래스는 싱글턴으로 동작하게 만들 수 있다.
object CarFactory {
val cars = mutableListOf<Car>()
fun makeCar(horsepowers: Int): Car {
val car = Car(horsepowers)
cars.add(car)
return car
}
}
class Car(power: Int) {
}
object 관련된 자세한 내용은 여기 를 참고하자!
2. object를 익명객체로 사용하기
object는 익명객체를 정의할 때도 사용된다. 익명객체는 이름이 없는 객체로, 한번만 사용되고 재사용되지 않을 때 사용한다. 재사용되지 않기 때문에 귀찮게 클래스 이름을 지어주지 않는 것이다.
2-1 특별한 상속없이 object만 필요한 경우
val helloWorld = object {
val hello = "Hello"
val world = "World"
// object expressions extend Any, so `override` is required on `toString()`
override fun toString() = "$hello $world"
}
2-2 익명 class 상속해서 사용하는 경우
window.addMouseListener(object : MouseAdapter() {
override fun mouseClicked(e: MouseEvent) { /*...*/ }
override fun mouseEntered(e: MouseEvent) { /*...*/ }
})
상속되는 익명 클래스의 객체를 만들떄는 object: 클래스() 이런식으로 사용한다.
기본적으로 클래스에서 상속하는 것처럼 이 클래스의 멤버 함수를 구현하거나 오버라이드가 가능하다.
open class A(x: Int) {
public open val y: Int = x
}
interface B { /*...*/ }
val ab: A = object : A(1), B {
override val y = 15
}
부모 클래스에 생성자가 있을때는 파라미터를 전달해야한다.
그리고 object 뒤에 쉼표 ' , ' 로 구분하여 여러 인터페이스를 추가로 상속받아 사용할 수 있다.
참고
반응형
'안드로이드(Kotlin)' 카테고리의 다른 글
Kotlin 코틀린의 object VS companion object (0) | 2022.08.30 |
---|---|
Kotlin 코틀린의 싱글톤(Singleton) (0) | 2022.08.30 |
Kotlin 코틀린의 Retrofit (0) | 2022.08.26 |
Kotlin 코틀린의 RecyclerView (0) | 2022.08.25 |
Kotlin 코틀린의 SharedPreferences (0) | 2022.08.08 |