[kotlin] sealed class (enum class μ™€μ˜ 차이점)

2026. 1. 17. 17:16Β·ν”„λ‘œκ·Έλž˜λ°/Android

Sealed class λž€ 

  • μ œν•œλœ 상속 계측을 λ§Œλ“€κΈ° μœ„ν•œ 도ꡬ. 즉, μ •μ˜ν•œ 클래슀 μ™Έμ˜ λ‹€λ₯Έ ν΄λž˜μŠ€κ°€ 상속을 λ°›μ§€ λͺ»ν•˜λ„둝 μ œν•œν•˜λŠ” ν΄λž˜μŠ€μ΄λ‹€. 
  • μ΄λ•Œ, μ»΄νŒŒμΌλŸ¬κ°€ μžμ‹ 클래슀의 μ’…λ₯˜λ₯Ό λͺ¨λ‘ νŒŒμ•…ν•˜κ³  있게 됨. 
fun handleStep(step: ProfileStep) {
    when(step) {
        is ProfileStep.Gender -> { /* 성별 처리 둜직 */ }
        is ProfileStep.Age -> { /* μ—°λ Ή 처리 둜직 */ }
        is ProfileStep.Complete -> { /* μ™„λ£Œ 처리 둜직 */ }
        // else κ°€ ν•„μš” μ—†
    }
}
  • μ΄λ ‡κ²Œ 되면 각 gender, age, complete ν΄λž˜μŠ€μ— 각각 ν•„μš”ν•œ 데이터λ₯Ό λ§ˆμŒλŒ€λ‘œ 넣을 수 있음. 

 

μ•ˆλ“œλ‘œμ΄λ“œ(kotlin) μ—μ„œ μ™œ sealed classλ₯Ό μ‚¬μš©ν•˜λŠ”κ°€  ?

  1. κ°μ²΄λ§ˆλ‹€ λ‹€λ₯Έ 정보λ₯Ό 담을 λ•Œ : enum 은 λͺ¨λ“  μƒμˆ˜κ°€ 같은 μ’…λ₯˜μ˜ λ°μ΄ν„°λ§Œ κ°€μ§ˆ 수 μžˆμ§€λ§Œ, sealed class λŠ” μžμ‹λ§ˆλ‹€ λ‹€λ₯Ό 수 있음. 
  2. 컴파일러의 μ™„μ „μ„± 체크 : whenλ¬Έμ—μ„œ sealed class λ₯Ό μ‚¬μš©ν•˜λ©΄, μ»΄νŒŒμΌλŸ¬κ°€ λͺ¨λ“  경우의 수λ₯Ό μ²˜λ¦¬ν–ˆλŠ”μ§€ ν™•μΈν•΄μ€Œ  
  3. 상속 ν†΅μ œ : 직계 μ„œλΈŒν΄λž˜μŠ€λŠ” λ™μΌν•œ νŒ¨ν‚€μ§€ 및 λͺ¨λ“ˆ 내에 μ •μ˜λ˜μ–΄μ•Όν•¨. μ΄λŠ” μ™ΈλΆ€μ—μ„œ λ§ˆμŒλŒ€λ‘œ 상속받아 μ˜λ„ν•˜μ§€ μ•Šμ€ μžμ‹ 클래슀λ₯Ό λ§Œλ“œλŠ” 것을 λ°©μ§€ν•΄ μ•ˆμ •μ μΈ api μœ μ§€ κ°€λŠ₯ν•˜κ²Œν•¨. 

 

Sealed class vs Enum class

ꡬ뢄 Enum Class (μ—΄κ±°ν˜•) Sealed Class (λ΄‰μΈλœ 클래슀)
μΈμŠ€ν„΄μŠ€ 개수 각 ν•­λͺ©μ€ 단 ν•˜λ‚˜μ˜ 객체(Singleton)만 쑴재 각 μ„œλΈŒν΄λž˜μŠ€λŠ” μ—¬λŸ¬ 개의 μΈμŠ€ν„΄μŠ€ 생성 κ°€λŠ₯
μƒνƒœ(데이터) λͺ¨λ“  μƒμˆ˜κ°€ λ™μΌν•œ ν˜•νƒœμ˜ λ°μ΄ν„°λ§Œ 가짐 각 μ„œλΈŒν΄λž˜μŠ€λ§ˆλ‹€ μ„œλ‘œ λ‹€λ₯Έ 데이터λ₯Ό κ°€μ§ˆ 수 있음
λͺ©μ  κ³ μ •λœ κ°’μ˜ μ§‘ν•© (μš”μΌ, 색상 λ“±) κ³ μ •λœ νƒ€μž…μ˜ μ§‘ν•© (UI μƒνƒœ, API 응닡 λ“±)
상속 λ‹€λ₯Έ 클래슀 상속 λΆˆκ°€ (μΈν„°νŽ˜μ΄μŠ€λ§Œ κ°€λŠ₯) 직접적인 상속 관계λ₯Ό μ—„κ²©νžˆ μ œν•œν•¨

'ν”„λ‘œκ·Έλž˜λ° > Android' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[kotlin] μ½”ν‹€λ¦°(Kotlin) κ³Ό 코루틴(Coroutine)에 λŒ€ν•΄  (1) 2026.01.17
[260114] Android Jetpack Compose의 3단계 μ‹€ν–‰ νŒŒμ΄ν”„λΌμΈ(μ»΄ν¬μ§€μ…˜, λ ˆμ΄μ•„μ›ƒ, 그리기)  (0) 2026.01.14
[260112] Android Context λž€?  (0) 2026.01.12
[240808][μ•ˆλ“œλ‘œμ΄λ“œ μžλ°”] μ•ˆλ“œλ‘œμ΄λ“œ ν”„λ‘œμ νŠΈ λΉŒλ“œ 및 μ‹€ν–‰ κ³Όμ •  (0) 2024.08.08
[Android/JAVA] "μ˜μ‹¬μŠ€λŸ¬μš΄ λ“€μ—¬μ“°κΈ°" 이슈 . . . Suspicious indentation 였λ₯˜. μž‘λ™μ—λŠ” 문제 μ—†μŒ  (2) 2024.02.09
'ν”„λ‘œκ·Έλž˜λ°/Android' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [kotlin] μ½”ν‹€λ¦°(Kotlin) κ³Ό 코루틴(Coroutine)에 λŒ€ν•΄
  • [260114] Android Jetpack Compose의 3단계 μ‹€ν–‰ νŒŒμ΄ν”„λΌμΈ(μ»΄ν¬μ§€μ…˜, λ ˆμ΄μ•„μ›ƒ, 그리기)
  • [260112] Android Context λž€?
  • [240808][μ•ˆλ“œλ‘œμ΄λ“œ μžλ°”] μ•ˆλ“œλ‘œμ΄λ“œ ν”„λ‘œμ νŠΈ λΉŒλ“œ 및 μ‹€ν–‰ κ³Όμ •
jennnnna
jennnnna
  • jennnnna
    πŸ’»πŸ€Jennna's BLOG
    jennnnna
  • 전체
    였늘
    μ–΄μ œ
    • λΆ„λ₯˜ 전체보기 (74) N
      • 컴퓨터 (1)
        • Operating system 운영체제 (8)
      • ν”„λ‘œκ·Έλž˜λ° (5)
        • JAVA (6)
        • PHP (1)
        • Android (7)
        • Apache (1)
        • Python (0)
      • 곡뢀 (15)
        • μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬ 곡뢀기둝 (12)
        • TIL (3)
      • AI (2) N
      • TTS (1)
      • LLM (2)
      • RAG (1)
      • μ–΄ν•™ (5)
        • English (5)
        • Japanese (ζ—₯本θͺž) (0)
      • κΈ€μ“°κΈ° (5)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • λ°©λͺ…둝
  • 링크

  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    μ•ˆλ“œλ‘œμ΄λ“œκ°œλ°œ
    μžλ°”λ…ν•™
    μžλ°”κΈ°μ΄ˆ
    μž₯μΈν•œκ³Ό
    μ •μ²˜κΈ°
    μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬
    λ¬΅μ€μ§€μ°ΈμΉ˜κΉ€λ°₯
    μžλ°”κ³΅λΆ€
    λΉ„μ „κ³΅μžcs곡뢀
    μ˜€λΈ”μ™„
    μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬ν•„κΈ°
    cs곡뢀
    μžλ°”κ³΅μ‹λ¬Έμ„œ
    CS지식
    ν‹°μŠ€ν† λ¦¬μ±Œλ¦°μ§€
    λΉ„μ „κ³΅μžκ°œλ°œμž
    운영체제
    μ•ˆλ“œλ‘œμ΄λ“œ
    μΉ΄νŽ˜μ•Œλ°”
    μš΄μ˜μ²΄μ œκ³΅λΆ€
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.5
jennnnna
[kotlin] sealed class (enum class μ™€μ˜ 차이점)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”