Kotlin : 다양한 클래스

정종욱·2023년 7월 5일
0

Kotlin

목록 보기
14/16
post-thumbnail

Data class

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

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, Sealed Interface

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 에 추가되었다.

0개의 댓글

관련 채용 정보