문제

Learn about operator overloading and how the different conventions for operations like ==, <, + work in Kotlin. Add the function compareTo to the class MyDate to make it comparable. After this, the code below date1 < date2 should start to compile.

Note that when you override a member in Kotlin, the override modifier is mandatory.

data class MyDate(val year: Int, val month: Int, val dayOfMonth: Int) : Comparable<MyDate> {
    /* TODO */
}

fun test(date1: MyDate, date2: MyDate) {
    // this code should compile:
    println(date1 < date2)
}

data class MyDate(val year: Int, val month: Int, val dayOfMonth: Int) : Comparable<MyDate> {
    override fun compareTo(other: MyDate) = when {
            year != other.year -> year - other.year
            month != other.month -> month - other.month
            else -> dayOfMonth - other.dayOfMonth
    }

}

fun test(date1: MyDate, date2: MyDate) {
    // this code should compile:
    println(date1 < date2)
}

풀이

MyDate 클래스에 compareTo 함수를 오버라이딩하여 MyDate 객체들을 비교 가능하게 만드는 문제이다.

Comparable 인터페이스를 구현하여 객체를 비교할 수 있으며, compareTo 함수를 오버라이딩해야 합니다.

코틀린에서 오버라이딩 하는 경우 override라는 예약어를 함수 앞에 붙여주면 된다.

compareTo 는 객체 자신과 매개변수로 들어오는 객체를 비교한다.

여기서는 두 날짜 객체를 비교하고, 비교 결과를 정수로 반환하면 된다.

  • 0보다 작음(음수): 현재 객체가 other 객체보다 작음
  • 0: 현재 객체와 other 객체가 같음
  • 0보다 큼(양수): 현재 객체가 other 객체보다 큼

순서대로 연, 월, 일을 비교하도록 하여서 비교 결과를 반환시키면 date1과 date2를 비교할 수 있게 된다.

profile
개발하는 다람쥐

0개의 댓글