본문 바로가기
Android/안드로이드 스터디(Kotlin)

Kotlin] 44. Comparable

by 김마리님 2020. 12. 23.

Comparable 인터페이스는 두 인터페이스를 서로 비교할 수 있게 해준다. IntelliJ 같은 경우는 자동으로 compareTo 라는 함수를, 같은 타입을 비교할 수 있도록 오버라이딩 해준다. 이 인터페이스를 상속하면 말 그대로 두 함수의 변수를 비교할 수 있게 된다.

 

예시를 보자

 

package comparableEx

class Rectangle(val width : Int, val height : Int) : Comparable<Rectangle> {

    val area = width * height

    override fun compareTo(other: Rectangle): Int =
        when {
            this.area > other.area -> 1
            this.area < other.area -> -1
            else -> 0
        }
}

fun main() {
    val rect = Rectangle(3,5)
    val rect2 = Rectangle(7,3)
    val rect3 = Rectangle(2,9)

    println(rect >= rect3)
    println(rect < rect3)
    println(rect2 > rect3)
}

 

Retangle class 에 Comparable 함수를 상속시킨다. 

(오버라이딩과 출력되는 값을 보니, 양수는 true를, 0이나 음수는 false를 반환하는 것 같음)

 

두 값을 비교할 때 true와 false를 반환할 방식을 택한다. 이 함수는 두 값을 비교했을 때, 좌항(this)이 우항(other)보다 크면 true를 반환하고 그 반대라면 false를 반환하도록 한다.

 

main 함수의 출력부를 보면 말 그대로 숫자형이 아닌 값을 연산자를 통해 비교하는데, 만약 걸어둔 상속을 제한다면?

 

다음처럼 컴파일 오류가 일어나 연산자를 아예 사용할수조차 없게 되어버린다.

그러니 클래스를 비교할때는 반드시 상속해야한다.

 

결과값 : 

false
true
true

 

 

 

반응형

'Android > 안드로이드 스터디(Kotlin)' 카테고리의 다른 글

Kotlin] 46. Iterable 인터페이스  (0) 2020.12.23
Kotlin] 45. ClosedRange  (0) 2020.12.23
Kotlin] 43. Triple  (0) 2020.12.22
Kotlin] 42. Pair  (0) 2020.12.17
Kotlin] 41. 위임  (0) 2020.12.14