Sealed class λ
- μ νλ μμ κ³μΈ΅μ λ§λ€κΈ° μν λꡬ. μ¦, μ μν ν΄λμ€ μΈμ λ€λ₯Έ ν΄λμ€κ° μμμ λ°μ§ λͺ»νλλ‘ μ ννλ ν΄λμ€μ΄λ€.
- μ΄λ, μ»΄νμΌλ¬κ° μμ ν΄λμ€μ μ’
λ₯λ₯Ό λͺ¨λ νμ
νκ³ μκ² λ¨.
fun handleStep(step: ProfileStep) {
when(step) {
is ProfileStep.Gender -> { /* μ±λ³ μ²λ¦¬ λ‘μ§ */ }
is ProfileStep.Age -> { /* μ°λ Ή μ²λ¦¬ λ‘μ§ */ }
is ProfileStep.Complete -> { /* μλ£ μ²λ¦¬ λ‘μ§ */ }
// else κ° νμ μ
}
}
- μ΄λ κ² λλ©΄ κ° gender, age, complete ν΄λμ€μ κ°κ° νμν λ°μ΄ν°λ₯Ό λ§μλλ‘ λ£μ μ μμ.
μλλ‘μ΄λ(kotlin) μμ μ sealed classλ₯Ό μ¬μ©νλκ° ?
- κ°μ²΄λ§λ€ λ€λ₯Έ μ 보λ₯Ό λ΄μ λ : enum μ λͺ¨λ μμκ° κ°μ μ’
λ₯μ λ°μ΄ν°λ§ κ°μ§ μ μμ§λ§, sealed class λ μμλ§λ€ λ€λ₯Ό μ μμ.
- μ»΄νμΌλ¬μ μμ μ± μ²΄ν¬ : whenλ¬Έμμ sealed class λ₯Ό μ¬μ©νλ©΄, μ»΄νμΌλ¬κ° λͺ¨λ κ²½μ°μ μλ₯Ό μ²λ¦¬νλμ§ νμΈν΄μ€
- μμ ν΅μ : μ§κ³ μλΈν΄λμ€λ λμΌν ν¨ν€μ§ λ° λͺ¨λ λ΄μ μ μλμ΄μΌν¨. μ΄λ μΈλΆμμ λ§μλλ‘ μμλ°μ μλνμ§ μμ μμ ν΄λμ€λ₯Ό λ§λλ κ²μ λ°©μ§ν΄ μμ μ μΈ api μ μ§ κ°λ₯νκ²ν¨.
Sealed class vs Enum class
| κ΅¬λΆ |
Enum Class (μ΄κ±°ν) |
Sealed Class (λ΄μΈλ ν΄λμ€) |
| μΈμ€ν΄μ€ κ°μ |
κ° νλͺ©μ λ¨ νλμ κ°μ²΄(Singleton)λ§ μ‘΄μ¬ |
κ° μλΈν΄λμ€λ μ¬λ¬ κ°μ μΈμ€ν΄μ€ μμ± κ°λ₯ |
| μν(λ°μ΄ν°) |
λͺ¨λ μμκ° λμΌν ννμ λ°μ΄ν°λ§ κ°μ§ |
κ° μλΈν΄λμ€λ§λ€ μλ‘ λ€λ₯Έ λ°μ΄ν°λ₯Ό κ°μ§ μ μμ |
| λͺ©μ |
κ³ μ λ κ°μ μ§ν© (μμΌ, μμ λ±) |
κ³ μ λ νμ
μ μ§ν© (UI μν, API μλ΅ λ±) |
| μμ |
λ€λ₯Έ ν΄λμ€ μμ λΆκ° (μΈν°νμ΄μ€λ§ κ°λ₯) |
μ§μ μ μΈ μμ κ΄κ³λ₯Ό μ격ν μ νν¨ |