안드로이드(Kotlin)

Kotlin 코틀린의 object와 class 키워드

영드로이드개발자 2022. 8. 30. 11:08
반응형

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 뒤에 쉼표 ' , ' 로 구분하여 여러 인터페이스를 추가로 상속받아 사용할 수 있다.

 

 

 

참고

codechacha님의 블로그

반응형