[Kotlin] object vs data object

๐Ÿ’ก๋น„์Šทํ•˜์ง€๋งŒ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์—ญํ• ์„ ํ•˜๋Š” object์™€ data object์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ๊ธฐ๋กํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

object

  • object๋Š” ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด์—์„œ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒํƒœ๋ฅผ ์ „์—ญ์ ์œผ๋กœ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜, ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค์ฒ˜๋Ÿผ ์ธ์Šคํ„ด์Šคํ™”ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ž๋™์œผ๋กœ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ, ๋ณ„๋„์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
object Singleton {
    var count = 0

    fun increment() {
        count++
    }
}

fun main() {
    Singleton.increment()
    println(Singleton.count)  // 1
}

data object

  • Kotlin 1.9๋ถ€ํ„ฐ ์ง€์›ํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

What's new in Kotlin 1.8.20 | Kotlin

 

What's new in Kotlin 1.8.20 | Kotlin

 

kotlinlang.org

  • object์™€ ๋™์ผํ•˜๊ฒŒ ์‹ฑ๊ธ€ํ†ค์ด์ง€๋งŒ, data class์ฒ˜๋Ÿผ ๊ฐ’ ๊ฐ์ฒด๋กœ ๋™์ž‘ํ•˜๋Š” object์ž…๋‹ˆ๋‹ค.

data object์˜ ํŠน์ง•?

  • ๋ถˆ๋ณ€ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ equals, hashCode, toString ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ์™€ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ํ•˜๋‚˜์˜ ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด๋กœ ๊ด€๋ฆฌํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

State & Event ๊ด€๋ฆฌ

  • sealed class๋‚˜ sealed interface์™€ ํ•จ๊ป˜ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ƒ์† ๊ด€๊ณ„๋กœ ์ œํ•œํ•˜๊ณ , ๋ถˆ๋ณ€์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ํ•˜๋‚˜์˜ ์ƒํƒœ๋ฅผ ํ‘œํ˜„ํ•˜๊ฑฐ๋‚˜ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ์— ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.
// ์ƒํƒœ ๊ด€๋ฆฌ์— ํ™œ์šฉ
sealed class UiState {
    object Loading : UiState()
    data object Success : UiState()
    data class Error(val message: String) : UiState()
}

// Event์— ํ™œ์šฉ
sealed interface Navigation : MyClubEvent {
    data class NavigateToClub(val clubId: Long) : Navigation

    data object NavigateToAddClub : Navigation
}

์ •๋ฆฌ

  • object๋Š” ์ผ๋ฐ˜์ ์ธ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ˜๋ฉด, data object๋Š” ์ฃผ๋กœ ๊ฐ’์„ ๊ฐ€์ง„ ๋ถˆ๋ณ€ ๊ฐ์ฒด๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
    • object๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ „์—ญ์ ์œผ๋กœ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • data object๋Š” ๊ฐ’๊ณผ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋ณ€์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, data class์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.