// getter, toString, equals, hashCode 자동으로 생성해줌
data class PersonDto(
val name: String,
val age: Int
)
// 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 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 활용