inflearn logo
강의

講義

知識共有

楽しいJava

アレイ2編

Java Comparator 인터페이스 - 람다 표현

676

songinno

投稿した質問数 3

0

안녕하세요 강의 감사히 잘 듣고 있습니다.

 

comparator 인터페이스(람다 인터페이스) 내부 코드 확인 중에,

equals()라는 메서드도 있는데, 이건 Object 클래스 메서드를 오버라이딩 한 것이라고 IntelliJ에서 알려줬습니다.

compare() 메서드랑 구조(리턴타입 메서드명(파라미터))가 똑같고, @override 표시가 없는데, equals()가 오버라이딩 되었는지 어떻게 확인할 수 있나요?

java

回答 2

0

enjoyjava

Java의 Comparator 인터페이스는 실제로 equals 메소드를 정의하지 않지만, 모든 자바 객체가 상속받는 Object 클래스의 메소드인 equals를 가지고 있습니다. 이 메소드는 두 객체가 같은지 비교하는 데 사용됩니다.

그러나 Comparator에서 equals 메소드의 명시적인 정의를 찾을 수 있는 이유는 Comparator의 일반 규약에 의해 equals 메소드가 필요할 수도 있기 때문입니다. 이는 Comparator 인스턴스를 PriorityQueue와 같은 특정 자료구조에 전달하거나 Collections.sort()와 같은 메소드에 전달할 때 중요합니다. 이런 경우 해당 자료구조 또는 메소드는 내부적으로 Comparatorequals 메소드를 사용할 수 있습니다.

Comparator 인터페이스의 equals 메소드는 다음과 같은 규약을 가집니다:

  • Comparator가 비교할 수 있는 모든 객체 집합이 동일한 순서로 주어진 경우, 두 Comparatorequals로 비교하면 true가 반환되어야 합니다.

다시 말해, Comparator 인터페이스의 equals 메소드는 주로 Comparator의 동등성을 검사하는 데 사용되며, 이것은 Comparator가 비교하는 방식, 즉 비교 로직이 동일한지를 판단하는 것을 의미합니다. 그러나 이러한 사용 사례는 매우 드물고, 대부분의 경우 개발자는 Comparatorequals 메소드를 재정의할 필요가 없습니다.

아래는 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 메소드는 objComparator의 인스턴스인지 확인합니다. 이것은 실제로 유용한 구현이 아닙니다(왜냐하면 모든 Comparator를 동일하게 취급하기 때문입니다), 하지만 이것은 어떻게 equals 메소드가 Comparator에서 재정의될 수 있는지에 대한 예를 보여줍니다. 일반적으로, equals 메소드를 재정의하는 경우 비교 로직이 같은지 확인하는 로직을 구현하게 됩니다.

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.

Comparator 인터페이스에는 equals() 메서드가 정의되어 있지 않습니다. Object 클래스에서 상속받은 메서드를 오버라이딩한 것이 아니라 확인하시면 감사하겠습니다.

그리고 equals() 메서드를 오버라이딩한다면, @Override 어노테이션이 표시됩니다. 따라서 해당 메서드 위에 @Override 어노테이션을 찾아보시면 오버라이딩 여부를 확인할 수 있습니다.

감사합니다.

0

songinno

답변 감사합니다.

그럼 제가 첨부한 이미지에 있는

boolean equals(Object obj); -> 이건 무엇을 의미하는 건가요?

패키지 구분에 대해 궁금한게 있습니다

0

11

1

안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.

0

19

1

갑자기 채점 사이트가 바뀌었어요

0

19

1

문제 리스트 페이지

0

22

1

채팅프로그램 한글 깨짐

0

497

2

강의 교안

0

771

2

split 사용에 있어서의 의도치 않은 값 할당이 되고 있네요

0

409

1

추상화와 추상클래스는 다른 말인가요? 그 용도가 궁금합니다

1

509

1

메서드와 프로퍼티의 차이가 뭔가요?

1

380

1

static이 클라스에 부여 되었을 때

1

308

1

Iterator<User> 대신에 Collections.unmodifiableList(users)를 사용해도 되나요?

0

373

1

++,--관련 질문드립니다.

0

431

1

Socket의 InputStream

0

586

2

API 문서가 만들어지지 않습니다

0

577

2

66. 채팅 프로그램 만들기 1/2

0

743

2

65. 네트워크프로그래밍1

0

394

1

this생성자 관련 질문 있습니다!

0

595

2

54. 배열 2편 강의 중

0

395

1

51. 배열 1편 강의 중..

0

303

1

50. 팩토리 메소드 패턴 강의 중

0

292

1

자바 공부법

1

1678

2

class object insatnce

1

693

1

43. 생성자 -super가 기본 생성자가 아닐 때

1

607

1

while문의 continue 예제3번에 관한 질문

0

423

2