영드로이드개발자
용이의 개발블로그
영드로이드개발자

블로그 메뉴

  • ⭐️ Home
  • 💻 GitHub
  • ❤️ Instagram
  • 👍 LinkedIn
  • 분류 전체보기 (44)
    • 공지사항 (1)
    • Daily 공부방 (0)
    • 프로그래밍 언어 (8)
      • Java (7)
      • Kotlin (1)
    • 안드로이드(Kotlin) (16)
    • 코딩테스트(Java) (11)
      • 기초 자료구조 (3)
      • 백준 (0)
      • 프로그래머스 1단계 (5)
      • 프로그래머스 2단계 (3)
    • 알고리즘 정리 (5)
    • 주간 목표계획 및 회고 (2)
    • Project (1)
      • Android App - 오마이코인 (1)

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
영드로이드개발자

용이의 개발블로그

Kotlin 코틀린의 object와 class 키워드
안드로이드(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님의 블로그

반응형
저작자표시 비영리 변경금지

'안드로이드(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
    '안드로이드(Kotlin)' 카테고리의 다른 글
    • Kotlin 코틀린의 object VS companion object
    • Kotlin 코틀린의 싱글톤(Singleton)
    • Kotlin 코틀린의 Retrofit
    • Kotlin 코틀린의 RecyclerView
    영드로이드개발자
    영드로이드개발자
    도전을 즐기는 안드로이드 개발자 현영우의 개발 Blog

    티스토리툴바