abstract : 알아두면 좋은 코틀린 문법

Interface

  • 추상 프로퍼티(멤버 변수)가 가능함

Data Class

  • hashCode, equals, toString, copy 멤버 함수 자동적 생성

 

Class와 Data Class 공통 특징

  • 세터와 게터 자동 생성 기능 존재(코드에 명시하지 않더라도 언어 차원에서 지원)

 

Sealed Class

  • enum class와 다르게 패턴 매칭 활용 가능
    • 리스트, 함수 타입에 대한 패턴매칭은 지원하지 않음(스칼라, 하스켈에서는 가능)
fun main() {
    println(checkValue("kotlin"))   // kotlin
    println(checkValue(5))      // 1..10
    println(checkValue(15))     // 11 or 15
    println(checkValue(User("Joe", 76)))    // User
    println(checkValue("unknown"))  // SomeValue

    println(checkCondition("kotlin"))   // kotlin
    println(checkCondition(5))   // 1..10
    println(checkCondition(User("Joe", 76)))   // == User(Joe, 76)
    println(checkCondition(User("Sandy", 65)))   // is User
    println(checkCondition("unknown"))   // SomeValue

    println(sum(listOf(1, 3, 4)))   // 8
}

data class User(val name: String, val age: Int)

fun checkValue(value: Any) = when (value) {
    "kotlin" -> "kotlin"
    in 1..10 -> "1..10"
    11, 15 -> "11 or 15"
    is User -> "User"
    else -> "SomeValue"
}

fun checkCondition(value: Any) = when {
    value == "kotlin" -> "kotlin"
    value in 1..10 -> "1..10"
    value === User("Joe", 76) -> "=== User"
    value == User("Joe", 76) -> "== User(Joe, 76)"
    value is User -> "is User"
    else -> "SomeValue"
}

fun sum(numbers: List<Int>): Int = when {
    numbers.isEmpty() -> 0
    else -> numbers.first() + sum(numbers.drop(1))
}