인프런에서 제공하고 있는 강의를 보고 정리한 글입니다.
Data Class
클래스가 장황해지거나, 클래스 생성 이후 추가적인 처리를 해줘야하는 단점이 있어서, 기존에 Java의 경우, Lombok 을 사용하곤 했었다. Kotlin에서는 다음과 같이 할 수 있다.
data class PersonDto (
val name: Stirng,
val age: Int,
) {
}
// 이렇게만 생성해줘도 hashCode, toString을 자동으로 만들어준다.
// 여기에 named argument 까지 활용하면, builder pattern 을 쓰는 것과 같은 효과를 누릴 수 있다.
Enum class
enum class Country(
private val code: String,
) {
KOREA("KO"),
AMERICA("US")
;
}
when
을 사용해보면 더 유용하게 사용할 수 있다. 컴파일러가 Country 의 모든 타입을 알고 있어, 다른 타입에 대한 로직(else)을 작성할 필요가 없다. Enum 에 변화가 있으면, IDE가 캐치해준다.
fun handleCountry(country: Country) {
when (country) {
Country.KOREA -> TODO()
Country.AMERICA -> TODO()
}
}
Sealed Class, Sealed Interface
상속이 가능하도록 추상클래스를 만들지만, 외부에서는 클래스를 상속받지 않았으면 해서 생긴 클래스이다. 하위 클래스를 봉인하자는 컨셉이다. 컴파일 타임 때 하위 클래스의 타입을 모두 기억하여, 런타임 때 클래스 타입이 추가될 수 없도록 한다.
sealed class Car (
val name: String,
val prive: Long,
)
class SUV : Car("suv", 1_000L)
class Truck : Car("truck", 2_000L)
class Sedan : Car("sedan", 3_000L)
private fun handleCar(car: Car) {
when(car) {
is SUV -> TODO()
is Truck -> TODO()
is Sedan -> TODO()
}
}
추상화가 필요한 Entity, DTO 에 Sealed Class 를 사용한다.
'[ Kotlin ]' 카테고리의 다른 글
코틀린에서 함수 및 람다를 다루는 방법 - 16강, 17강 (0) | 2024.08.28 |
---|---|
코틀린에서 배열과 컬렉션을 다루는 방법 - 15강 (0) | 2024.08.28 |
코틀린에서 중첩 클래스를 다루는 방법 - 13강 (0) | 2024.08.28 |
코틀린에서 object 키워드를 다루는 방법 - 12강 (1) | 2024.08.28 |
코틀린에서 접근 제어를 다루는 방법 - 11강 (2) | 2024.08.28 |