안녕하세요.
이번 포스팅에서는 Sealed Class와 Enum Class의 차이 및
Sealed Class의 사용에 대해 적어보려고 합니다.
Enum Class는 열거형이라고도 부르며 각 서브클래스들이 상수화된 클래스들입니다.
즉 각 서브클래스들이 고정적인 형태를 지니게 됩니다.
아래 코드처럼 Animal 이라는 Enum 클래스에 Dog, Cat, Pig라는 서브클래스들이 존재합니다.
그리고 이 클래스들은 name을 가지게 되는데 이는 정적인 형태로 항상 같은 값을 가지게 됩니다.
enum class Animal(name: String) {
Dod("dog"),
Cat("cat"),
Pig("pig");
}
Enum 클래스를 사용하면 가독성이 좋아지고 명확하게 알고 있는 상수형이 있을 때 사용하기 편합니다.
또한 컴파일 시간에 jvm에 올라가기 때문에 외부 패키지에서 접근 할 수 없습니다.
그러나 이런 Enum을 쓰면서 불편한점이 있는데 Enum클래스 안에 들어가는 데이터가 정적이라는 부분입니다.
즉 Dog 클래스의 dog는 변경할 수 없는데 이때 우리는 Sealed 클래스를 사용할 수 있습니다.
Sealed 클래스는 같은 서브클래스에 서로 다른 값을 줄 수 있습니다.
즉 Dog 클래스에 이름이 dog가 아니라 fat dog, slim dog 등 사용 할 수 있습니다.
sealed class Animal {
data class Dog(val name: String): Animal()
data class Cat(val name: String): Animal()
data class Pig(val name: String, val weight: Int): Animal()
}
위의 코드를 보시면 Animal을 상속한 각 Dog, Cat, Pig 클래스들이 있고
각각 이름을 받에 정의했습니다.
val fatDog = Animal.Dog("fat dog")
val slimDog = Animal.Dog("slim dog")
println(fatDog.name)
println(slimDog.name)
그리고 이렇게 같은 Dog 클래스에 이름을 다르게 주어 생성하여 쓸 수 있습니다.
또한 Pig class를 보면 parameter도 다르게 들어갈 수 있는 것을 알 수 있습니다.
이런 Sealed 클래스를 이용해서 네트워크 통신의 결과를 쉽게 처리할 수 있는데요.
이 부분은 다음 포스팅에 올리겠습니다.
감사합니다.
'기타 > 코틀린' 카테고리의 다른 글
[Kotlin] Sequence vs Collections (0) | 2022.07.05 |
---|---|
[Kotlin] inline과 reified (0) | 2022.07.02 |
[Kotlin] map, flatMap 비교 (0) | 2022.06.21 |
코틀린 특징 및 자바와 차이점 정리(작성중) (0) | 2021.10.04 |
댓글