π‘μ°μνν ν¬μ½μ€ μΈν°λ·° κ³Όμ μμ λ°μλ μ§λ¬Έ μ€μΈ sealed class vs enum classμ λνμ¬ μ 리νμμ΅λλ€.
enum class
- enum classλ μ΄κ±°ν ν΄λμ€λ‘, 미리 μ μλ μμμ μ§ν©μ λνλΌ λ μ¬μ©ν©λλ€.
μ½νλ¦°μ μ΄κ±°ν ν΄λμ€ (Enum Class)
- κ³ μ λ κ°μ μ§ν©μ λνλΌ λ μ¬μ©λλ©°, κ° κ°μ μΈμ€ν΄μ€νλμ§ μμ μ±κΈν€μ λλ€.
- λ¨μν μνλ μ΅μ μ λνλΌ λ μ ν©ν©λλ€.
enum class Direction {
NORTH, SOUTH, EAST, WEST
}
enum class NetworkState(val code: Int) {
SUCCESS(200),
ERROR(404),
TIMEOUT(408)
}
νΉμ§
- κ° μ΄κ±°ν μμμ λ°μ΄ν°λ₯Ό ν¬ν¨ν μ μκ³ , κ° μμλ μμ μ ꡬνμ κ°μ§ μ μμ΅λλ€.
- μμκ° μΈμ λ³λμ μμμ΄λ 볡μ‘ν ꡬ쑰λ₯Ό μ μνκΈ° μ΄λ €μ°λ©°, νμ₯μ±μ΄ λ¨μ΄μ§λλ€.
sealed class
- sealed classλ μ νλ μμμ νμ©νλ ν΄λμ€μ λλ€.
- μκΈ° μμ μ΄ μΆμ ν΄λμ€μ΄λ©°, μμ μ μμλ°λ μ¬λ¬ μλ² ν΄λμ€λ€μ κ°μ§ μ μμ΅λλ€.
- κΈ°λ³Έμ μΌλ‘ μΆμ ν΄λμ€μ΄λ©°, private μμ±μλ§μ κ°μ§λλ€.
- μμν μ μλ νμ ν΄λμ€λ κ°μ νμΌ λ΄μμλ§ μ μν μ μμ΅λλ€.
- sealed ν΄λμ€μ μλΈ ν΄λμ€λ₯Ό μμν ν΄λμ€λ€μ κ°μ νμΌ λ΄μ μμ΄λ λμν©λλ€.
sealed class NetworkResponse {
object Success : NetworkResponse()
data class Error(val errorCode: Int) : NetworkResponse()
object Timeout : NetworkResponse()
}
νΉμ§
- 볡μ‘ν μνλ μ΄λ²€νΈλ₯Ό ννν λ μ ν©νλ©°, κ° νμ ν΄λμ€λ λ³λμ ꡬνμ΄λ λ°μ΄ν°λ₯Ό κ°μ§ μ μμ΅λλ€.
- object, data class, class, data object λ±μ μμλ°μ μ¬μ©ν μ μμ΅λλ€.
- νμ₯μ±μ΄ λ°μ΄λλ©°, μμ κ΄κ³μ κ²°ν©ν΄ μ μ°ν ꡬ쑰λ₯Ό λ§λ€ μ μμ΅λλ€.
enum vs sealed
- enum classλ μ±μ κ°λ¨ν μν(ON/OFF, START/STOP), μ€μ μ΅μ
, μ΄κ±° κ°λ₯ν κ° μ§ν©μ΄ νμν λ μ¬μ©ν©λλ€.
- κ³ μ λ μμ μ§ν©μ ννν λ μ μ©νλ©°, λ¨μν κ°μ΄λ μνλ₯Ό λμ΄ν λ μ¬μ©ν©λλ€.
- sealed classλ 볡μ‘ν UI μν, API μλ΅ λͺ¨λΈλ§, λ€μν ννμ μ΄λ²€νΈ μ²λ¦¬ λ±μ μ¬μ©ν©λλ€.
- 볡μ‘ν κ³μΈ΅ ꡬ쑰μ λ€μν μνλ μ΄λ²€νΈλ₯Ό λ€λ£° μ μλ μ μ°μ±μ μ 곡ν λ μ¬μ©ν©λλ€.