본문 바로가기
기타/코틀린

코틀린 Sealed Class와 Enum Class

by 창이2 2021. 7. 1.

안녕하세요.

이번 포스팅에서는 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

댓글