작성
·
543
0
안녕하세요 강의 감사히 잘 듣고 있습니다.
comparator 인터페이스(람다 인터페이스) 내부 코드 확인 중에,
equals()라는 메서드도 있는데, 이건 Object 클래스 메서드를 오버라이딩 한 것이라고 IntelliJ에서 알려줬습니다.
compare() 메서드랑 구조(리턴타입 메서드명(파라미터))가 똑같고, @override 표시가 없는데, equals()가 오버라이딩 되었는지 어떻게 확인할 수 있나요?
답변 2
0
Java의 Comparator
인터페이스는 실제로 equals
메소드를 정의하지 않지만, 모든 자바 객체가 상속받는 Object
클래스의 메소드인 equals
를 가지고 있습니다. 이 메소드는 두 객체가 같은지 비교하는 데 사용됩니다.
그러나 Comparator
에서 equals
메소드의 명시적인 정의를 찾을 수 있는 이유는 Comparator
의 일반 규약에 의해 equals
메소드가 필요할 수도 있기 때문입니다. 이는 Comparator
인스턴스를 PriorityQueue
와 같은 특정 자료구조에 전달하거나 Collections.sort()
와 같은 메소드에 전달할 때 중요합니다. 이런 경우 해당 자료구조 또는 메소드는 내부적으로 Comparator
의 equals
메소드를 사용할 수 있습니다.
Comparator
인터페이스의 equals
메소드는 다음과 같은 규약을 가집니다:
Comparator
가 비교할 수 있는 모든 객체 집합이 동일한 순서로 주어진 경우, 두 Comparator
를 equals
로 비교하면 true
가 반환되어야 합니다.
다시 말해, Comparator
인터페이스의 equals
메소드는 주로 Comparator의 동등성을 검사하는 데 사용되며, 이것은 Comparator가 비교하는 방식, 즉 비교 로직이 동일한지를 판단하는 것을 의미합니다. 그러나 이러한 사용 사례는 매우 드물고, 대부분의 경우 개발자는 Comparator
의 equals
메소드를 재정의할 필요가 없습니다.
아래는 Comparator
에서 equals
메소드를 재정의하는 예시입니다:
Comparator<String> caseInsensitiveComparator = new Comparator<>() {
@Override
public int compare(String o1, String o2) {
return o1.compareToIgnoreCase(o2);
}
@Override
public boolean equals(Object obj) {
return obj != null && obj instanceof Comparator;
}
};
이 equals
메소드는 obj
가 Comparator
의 인스턴스인지 확인합니다. 이것은 실제로 유용한 구현이 아닙니다(왜냐하면 모든 Comparator
를 동일하게 취급하기 때문입니다), 하지만 이것은 어떻게 equals
메소드가 Comparator
에서 재정의될 수 있는지에 대한 예를 보여줍니다. 일반적으로, equals
메소드를 재정의하는 경우 비교 로직이 같은지 확인하는 로직을 구현하게 됩니다.
0
안녕하세요, 인프런 AI 인턴입니다.
Comparator 인터페이스에는 equals() 메서드가 정의되어 있지 않습니다. Object 클래스에서 상속받은 메서드를 오버라이딩한 것이 아니라 확인하시면 감사하겠습니다.
그리고 equals() 메서드를 오버라이딩한다면, @Override 어노테이션이 표시됩니다. 따라서 해당 메서드 위에 @Override 어노테이션을 찾아보시면 오버라이딩 여부를 확인할 수 있습니다.
감사합니다.
답변 감사합니다.
그럼 제가 첨부한 이미지에 있는
boolean equals(Object obj); -> 이건 무엇을 의미하는 건가요?