inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

김영한의 실전 자바 - 중급 2편

정렬2 - Comparable, Comparator

comparable, comparator

144

ghuhan18

작성한 질문수 121

0

강의를 보면 ID 를 통한 Array 배열을 정렬할때

IdComparator 를 만드셨는데, 사실 comparable 에서도 충분히 정의할 수 있는 것 아닌가요 ?
단순히 Comparator 를 통해서도 할 수 있다라는 것을 보여주기 위함인가요 ?

또한 언제 comparable 을 쓰는 게 낫고 언제 comparator 를 쓰는게 나은가요 ?

java 객체지향 코딩-테스트 알고리즘

답변 1

0

인프런 AI 인턴

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

ghuhan18님의 질문에 대해, “Comparable과 Comparator를 사용하는 경우” 에 대한 유용한 정보를 제공해 드릴 수 있을 것 같습니다.

ComparableComparator는 Java에서 객체를 정렬하는 데 사용되는 두 가지 주요 인터페이스입니다. 두 인터페이스의 주요 차이점은 다음과 같습니다.

  • Comparable은 객체가 자신과 다른 객체를 비교할 수 있게 해주며, 이 인터페이스의 compareTo() 메소드를 구현하여 사용합니다. 이 방법은 객체의 자연적인 순서를 정의하는 데 사용되며, 각 객체가 자신과 다른 객체를 비교하는 기능을 내부적으로 가지고 있어야 합니다. 일반적으로 해당 객체의 기본 정렬 기준을 설정할 때 사용됩니다.

  • Comparator는 별도의 비교 함수를 제공하여 두 객체를 외부에서 비교할 수 있게 해줍니다. 이를 통해 여러 다른 정렬 기준을 제공할 수 있으며, 같은 객체들을 다양한 기준으로 정렬할 필요가 있을 때 유용합니다.

Comparable을 사용하는 것이 적합한 경우는, 객체의 자연적인 정렬 순서가 있고, 해당 객체 내에서 구현 가능할 때입니다. 예를 들어, 날짜, 숫자 값 등이 이에 해당할 수 있습니다.

Comparator를 사용하는 경우는, 기본 정렬 방식 외에 다른 정렬 기준이 필요하거나, 정렬 기준을 유연하게 바꾸고 싶을 때 적합합니다. 예를 들어, 객체를 다양한 속성(이름, 나이, 등록일)에 따라 정렬해야 하는 경우가 이에 해당합니다.

질문에서 언급한 “ID를 통한 배열 정렬”의 경우, ID가 객체의 자연적인 순서를 나타내면 Comparable을, 정렬 기준이 여러 개이거나 변경될 가능성이 있을 경우 Comparator를 사용하는 것이 바람직합니다.

강의에서 ID를 비교하기 위해 Comparator를 사용한 예제는, Comparator를 사용하여 정렬 기준을 외부에서 정의하고 다양한 정렬 기준으로 유연하게 활용할 수 있는 방법을 보여주기 위함이었을 수 있습니다.

Comparable이 아닌 Comparator를 사용하는 경우 링크에서, 유사한 상황에 대한 더 깊은 토론을 찾을 수 있습니다. 이 자료는 ComparableComparator를 언제 사용해야 하는지에 관한 구체적인 예시와 설명을 제공합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

제네릭 타입 매개변수 제한과 관련한 문의입니다.

0

80

3

강의가 좀 버겁다 느껴질 때 학습방법 문의

1

135

4

제네릭 반환값 및 파라미터 선언 방식의 변화 <T> T

0

63

1

new T()가 안 되는 니유

0

102

1

안녕하세요, 문제와 실행 결과가 다른 부분이 있어 제보드립니다.

0

98

2

자바 로드맵 선택 질문

0

111

2

실전 자바 중급 - 2편 후 추천 강의

0

177

2

실프로젝트에서 Java25버전 사용

0

121

1

Arrays.sort

0

68

1

블로그 작성 시, 저작권 문제에 대하여

0

166

1

중급2편 56강의 bucket.add(value); 메서드가 이해가 안됩니다.

0

94

3

pop()과 poll()의 차이

0

94

1

특정 index의 노드 조회하기 질문

0

66

2

List.of() 비어있는 불변 리스트 생성

0

81

2

문제2: 개 타입 반환

0

56

2

[리뷰] 중급2편까지 겨우 완강 했습니다.

0

114

2

문제와 풀이1 Ex2와 Ex3

0

65

2

노드 삭제시 노드 null값으로 초기화

0

78

2

강의영상에 대한 질문

0

57

1

타입 매개변수 제한

0

59

1

compareTo

0

68

1

직접 구현하는 연결리스트 3 - 추가 부분 질문있습니다

0

99

3

섹션 8-58 equals and hashcode 에서 코드가 다르게 생성됨

0

70

2

퀴즈 오류 관련 문의

0

109

1