[Kotlin] sealed class vs enum class

πŸ’‘μš°μ•„ν•œν…Œν¬μ½”μŠ€ 인터뷰 κ³Όμ •μ—μ„œ λ°›μ•˜λ˜ 질문 쀑인 sealed class vs enum class에 λŒ€ν•˜μ—¬ μ •λ¦¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

 

enum class

  • enum classλŠ” μ—΄κ±°ν˜• 클래슀둜, 미리 μ •μ˜λœ μƒμˆ˜μ˜ 집합을 λ‚˜νƒ€λ‚Ό λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

μ½”ν‹€λ¦°μ˜ μ—΄κ±°ν˜• 클래슀 (Enum Class)

 

μ½”ν‹€λ¦°μ˜ μ—΄κ±°ν˜• 클래슀 (Enum Class)

μ½”ν‹€λ¦°μ—μ„œλŠ” μžλ°”μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ νƒ€μž…μ„ λ‹΄λŠ” 클래슀인 enum 클래슀λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€. μ—΄κ±°ν˜• 클래슀라고 ν•˜λ©°, μ•„λž˜μ™€ 같이 μƒμˆ˜λ₯Ό μ§‘ν•©μœΌλ‘œ 관리할 수 μžˆμ–΄ μ½”λ“œμ— 가독성이 λ†’μ•„μ§‘λ‹ˆλ‹€. 이번 ν”„

jinudmjournal.tistory.com

  • κ³ μ •λœ κ°’μ˜ 집합을 λ‚˜νƒ€λ‚Ό λ•Œ μ‚¬μš©λ˜λ©°, 각 값은 μΈμŠ€ν„΄μŠ€ν™”λ˜μ§€ μ•Šμ€ μ‹±κΈ€ν†€μž…λ‹ˆλ‹€.
  • λ‹¨μˆœν•œ μƒνƒœλ‚˜ μ˜΅μ…˜μ„ λ‚˜νƒ€λ‚Ό λ•Œ μ ν•©ν•©λ‹ˆλ‹€.
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 응닡 λͺ¨λΈλ§, λ‹€μ–‘ν•œ ν˜•νƒœμ˜ 이벀트 처리 등에 μ‚¬μš©ν•©λ‹ˆλ‹€.
    • λ³΅μž‘ν•œ 계측 ꡬ쑰와 λ‹€μ–‘ν•œ μƒνƒœλ‚˜ 이벀트λ₯Ό λ‹€λ£° 수 μžˆλŠ” μœ μ—°μ„±μ„ μ œκ³΅ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.