728x90
Enum
코틀린에는 당연히 enum
클래스가 존재.
enum class Color(val r: Int, val g: Int, val b: Int) { RED(255, 0, 0), ORANGE(255, 165, 0), YELLOW(255, 255, 0), GREEN(0, 255, 0), BLUE(0, 0, 255); fun rgb() = (r * 256 + g) * 256 + b } fun getColorName(color: Color) = when (color) { Color.RED -> "빨강" Color.ORANGE -> "주황" Color.YELLOW -> "노랑" Color.GREEN -> "초록" Color.BLUE -> "파랑" } fun main() { println(getColorName(Color.BLUE)) }
이 코드에서 RGB 값을 수정하는 요청을 수행해보자
- enum클래스의 각 상수들은 싱글톤 디자인 패턴을 따르기 때문에, 단 하나의 인스턴스만 존재
- 따라서 최소에 설정한 상태를 변경할 수 없다. 즉 정적인 상태를 가짐
- 또한 상속이 불가능 하기에 서브 클래스 생성 불가
What?
이러한 enum 클래스의 제약사항을 커버하기 위해 sealed 클래스 두두등장
enum 과 달리 상속을 지원하기 때문에 상속을 활용한 다양한 동작을 구현 가능
추가로 자신이 상속받는 서브 클래스의 종류를 제한할 수 있음
특징
- sealed 클래스의 서브클래스들은 반드시 같은 파일 내에 선언
- sealed 클래스는 기본적으로 abstract 클래스
- sealed 클래스는 private 생성자만 가짐
사용
sealed class Color { data class Red(val r: Int, val g: Int, val b: Int) : Color() data class Orange(val r: Int, val g: Int, val b: Int) : Color() data class Yellow(val r: Int, val g: Int, val b: Int) : Color() data class Green(val r: Int, val g: Int, val b: Int) : Color() data class Blue(val r: Int, val g: Int, val b: Int) : Color() data class Indigo(val r: Int, val g: Int, val b: Int) : Color() data class Violet(val r: Int, val g: Int, val b: Int) : Color() }
- 서브 클래스들은 각기 다른 값을 가지고 생성될 수 있다.
class
,dataclass
,object
모두 가능!
상태값이 바뀌지 않는 서브 클래스의 경우 object
를 사용하는 것을 권장
fun main() { val color: Color = Color.Red(255, 0, 20) when (color) { is Color.Red -> println("빨강") is Color.Orange -> println("주황") is Color.Yellow -> println("노랑") is Color.Green -> println("초록") is Color.Blue -> println("파랑") is Color.Indigo -> println("인디고") is Color.Violet -> println("바이올렛") } }
위와 같이 상태값을 쉽게 변경하는 동작이 가능하게 되는 것임
장점
sealed 클래스의 서브클래스 각각에 대해 여러개의 인스턴스 생성가능
→ 상태값을 유동적으로 변경
참고
728x90
'Android > Study' 카테고리의 다른 글
💡 안드로이드에서 MVVM 패턴이란? (0) | 2022.08.20 |
---|---|
🏛 클린 아키텍처 in 안드로이드 (Clean Architecture) (0) | 2022.08.20 |
💉 Dependency Injection 의존성 주입이란? (0) | 2022.08.20 |
📥 단방향 데이터 플로우 Undirectional Data Flow (UDF) 패턴 (0) | 2022.08.20 |
💡 Kotlin 코틀린 : DataClass 란? (0) | 2022.08.20 |