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 |