๐ก๋น์ทํ์ง๋ง ๊ฐ๊ธฐ ๋ค๋ฅธ ์ญํ ์ ํ๋ 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
- 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์ ๋ฉ์๋๋ฅผ ํ์ฉํ ์ ์๋ ์ฑ๊ธํค ๊ฐ์ฒด์ ๋๋ค.