개요
Java에서는 두 객체를 비교하려면 Comparable 인터페이스의 CompareTo()
메소드를 구현하여 객체를 비교해야 했다. Kotlin에서도 마찬가지로 두 객체를 비교하려면 Comparable 인터페이스의 CompareTo()
메소드를 구현해야 하는것은 동일하지만 이 과정만 수행해놓으면 훨씬 직관적으로 두 객체를 비교할 수 있다. 이에 대해 알아보도록 하자.
Comparable 인터페이스의 CompareTo()
메소드는 현재 객체와 파라미터로 받은 객체 사이의 특정 연산을 통해 결과가 양수이면 현재 객체가 더 크고, 결과가 음수이면 현재 객체가 더 작다고 판별한다.
Java에서의 두 객체 비교
Java에서 두 객체를 비교하려면 객체의 클래스에서 Comparable 인터페이스의 CompareTo()
메소드를 구현하고, 이를 토대로 두 객체를 비교해야 했다. 아래의 코드는 사람을 나타내는 Person 클래스에서 키를 우선적으로 비교하고 키가 같다면 몸무게를 비교하는 경우를 나타낸 것이다.
public class Main {
public static void main(String[] args) {
Person person1 = new Person(170, 60);
Person person2 = new Person(178, 68);
Person person3 = new Person(178, 70);
if (person2.compareTo(person1) > 0)
System.out.println("2번 사람은 1번 사람보다 큽니다.");
else
System.out.println("2번 사람은 1번 사람보다 작습니다.");
if (person2.compareTo(person3) > 0)
System.out.println("2번 사람은 3번 사람보다 큽니다.");
else
System.out.println("2번 사람은 3번 사람보다 작습니다.");
}
static class Person implements Comparable<Person> {
int height;
int weight;
public Person(int height, int weight) {
this.height = height;
this.weight = weight;
}
@Override
public int compareTo(@NotNull Person o) {
if (this.height == o.height) return this.weight - o.weight;
else return this.height - o.height;
}
}
}
/*
2번 사람은 1번 사람보다 큽니다.
2번 사람은 3번 사람보다 작습니다.
*/
Java에서는 이와 같이 직접적으로 CompareTo()
메소드를 직접 호출하여 그 결과값을 토대로 두 객체를 비교해야 했다. 그러다보니 직관성이 조금 떨어지는 면이 있었다.
Kotlin에서의 두 객체 비교
Kotlin에서도 두 객체를 비교하기 위해 객체의 클래스에서 Comparable 인터페이스의 CompareTo()
메소드를 구현해야 하는 것은 동일하나, Kotlin에서는 CompareTo()
를 직접 호출하지 않고도 두 객체를 비교할 수 있다. 위의 Java 코드를 Kotlin 코드로 나타내면 아래와 같다.
fun main() {
val person1 = Person(170, 60)
val person2 = Person(178, 68)
val person3 = Person(178, 70)
if (person2 > person1)
println("2번 사람은 1번 사람보다 큽니다.")
else
println("2번 사람은 1번 사람보다 작습니다.")
if (person2 > person3)
println("2번 사람은 3번 사람보다 큽니다.")
else
println("2번 사람은 3번 사람보다 작습니다.")
}
class Person(var height: Int, var weight: Int) : Comparable<Person> {
override operator fun compareTo(other: Person) =
if (height == other.height) weight - other.weight
else height - other.height
}
/*
2번 사람은 1번 사람보다 큽니다.
2번 사람은 3번 사람보다 작습니다.
*/
코드에서 볼 수 있듯이 Kotlin에서는 객체의 클래스에서 Comparable 인터페이스를 구현했다면 수를 비교하는 것과 동일하게 부등호만으로도 두 객체를 비교할 수 있다. 이는 Kotlin의 CompareTo()
메소드가 operator fun, 즉 연산자 함수이기 때문이며 부등호만 사용해도 CompareTo()
를 호출하게 된다.
Kotlin에서는 이렇게 메소드를 직접 호출하지 않고 부등호만 사용해도 두 객체를 비교할 수 있게 되어 Java에 비해 더 직관적으로 두 객체를 비교할 수 있다.
'Programming Language > Kotlin & Java' 카테고리의 다른 글
Kotlin 기본 문법 8 : 정적 변수와 정적 메소드(feat. companion object) (0) | 2022.12.14 |
---|---|
Kotlin 기본 문법 7 : 추상 클래스/인터페이스와 클래스의 상속 (0) | 2022.12.13 |
Kotlin에서 한 줄로 받은 입력을 여러개의 변수에 할당하는 방법(구조 분해) (0) | 2022.12.08 |
Kotlin 기본 문법 6 : 클래스와 접근 지정자 (1) | 2022.12.02 |
Kotlin 기본 문법 번외 : 입력과 출력 (0) | 2022.11.28 |
댓글