[Kotlin] Data class, Enum class, Sealed Class

유존돌돌이·2023년 3월 22일
0

Kotlin

목록 보기
6/10
post-thumbnail

data class

// getter, toString, equals, hashCode 자동으로 생성해줌
data class PersonDto(
    val name: String,
    val age: Int
)

enum class

// when과 같이 쓰면 좋다. (Kotlin은 컴파일 타임에 emum이 수정되면 알려주기 때문
// when' expression must be exhaustive, add necessary 'RUSIA' branch or 'else' branch instead
fun checkCountry(country: Country) = when(country) {
    Country.KOREA -> "한국"
    Country.AMERICA -> "미국"
}

enum class Country (
    private val code: String,
) {
    KOREA("KO"),
    AMERICA("US"),
    RUSIA("RUSIA");
}

Sealed class

sealed class HyundaiCar(
    val name: String,
    val price: Long
)

class Avante : HyundaiCar("아반떼", 1_000L)
class Sonata : HyundaiCar("소나타", 2_000L)
class Grandeur : HyundaiCar("그렌저", 3_000L)

// sealed class 또한 when과 같이 사용하면 편리하다.
fun checkCar(car: HyundaiCar) {
    when(car) {
        is Avante -> TODO()
        is Grandeur -> TODO()
        is Sonata -> TODO()
    }
}

Sealed Class, Sealed Interface
컴파일 타임 때 하위 클래스의 타입을 모두 기억한다.
즉, 런타임때 클래스 타입이 추가될 수 없다.

하위 클래스는 같은 패키지에 있어야 한다.

Enum과 다른점
1. 클래스를 상속받을 수 있다.
2. 하위 클래스는 멀티 인스턴스가 가능하다.

  • 추상화가 필요한 Entity or DTO에 sealed class 활용

0개의 댓글