data class PersonDto(
val name: String,
val age: Int
)
코틀린에서는 class 앞에 data 를 붙여주면 equals, hashCode, toString 을 자동으로 만들어준다.
여기에 named argument 까지 활용하면 builder pattern 을 쓰는 것 같은 효과도 있다.
👏 TIP : 자바에서는 `record class` 라고 쓰이며 JDK 16부터 도입되었다.
enum class Country(
private val code: String
) {
KOREA("KO"),
AMERICA("US")
}
자바랑 크게 다를 것이 없다.
fun handleCountry(country: Country) {
when (country) {
Country.KOREA -> TODO()
Country.AMERICA -> TODO()
}
}
when 은 Enum Class 혹은 Sealed Class 와 함께 사용할 경우 진가를 발휘한다. 여기서 Enum 값이 추가된다면 로직상 알림이 온다. 또한, else 를 사용할 필요가 없어서 더 깔끔하다.
sealed class HyundaiCar(
val name: String,
val price: Long
)
class Avante : HyundaiCar("아반떼", 2_700L)
class Santafe : HyundaiCar("싼타페", 5_600L)
컴파일 타임 때 하위 클래스의 타입을 모두 기억한다.
즉, 런타임 때 클래스 타입 추가가 불가능하다.
하위 클래스는 같은 패키지에 있어야 한다.
Enum 과 다른점
private fun handleCar(car: HyundaiCar) {
when (car) {
is Avante -> TODO()
is Santafe -> TODO()
}
}
Enum 과 똑같이 코드가 간략하며 Sealed class 의 하위 구현체가 추가되거나 제거되었을 때 쉽게 알아차릴 수 있다.
👏 TIP : Sealed Class JDK 17 에 추가되었다.