250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- types
- dotnet
- 혼공
- 혼공학습단
- 접근 제어자
- 티스토리챌린지
- Proxy Object
- Access Modifier
- 혼공컴운
- Lazy loading
- 스프링 부트 3
- 자율학습
- 오블완
- 0 시작
- 인프런
- cluster index
- 혼공자바
- 인터페이스
- literal
- 나도코딩
- noncluster index
- entrySet
- java
- Functional Interfaces
- HashMap
- Interface
- Spring Data JPA
- 네트워크
- Wildcard
- 접근제어자
Archives
- Today
- Total
지금을 사는 사람
[Java] CompareTo 와 Comparator 본문
728x90
예제: 객체 목록 정렬
가령 name
과 rating
속성을 가진 Game
클래스가 있다고 가정해봅시다.
public class Game implements Comparable<Game> {
private String name;
private double rating;
// 생성자, 게터, 세터 등...
@Override
public int compareTo(Game otherGame) {
// 등급을 기준으로 비교하는 메서드 구현
return Double.compare(this.rating, otherGame.rating);
}
}
이 예제에서 Game
클래스는 Comparable
인터페이스를 구현하며, 객체를 등급에 기반하여 비교할 수 있게 합니다. compareTo
메서드는 현재 객체가 지정된 객체보다 작으면 음수, 같으면 0, 크면 양수를 반환합니다.
이제 List<Game>
이 있고 이를 정렬하고 싶다고 가정해 봅시다. Collections.sort()
를 사용하면 자동으로 Game
클래스에서 정의한 compareTo
메서드를 사용합니다.
List<Game> games = new ArrayList<>();
// 목록 채우기...
Collections.sort(games);
// 이제 'games'는 등급을 기준으로 정렬됩니다.
기본 자연 순서가 충분한 경우 유용합니다. 그러나 게임을 동적으로 이름 또는 다른 기준으로 정렬하려면 어떨까요?
여기에서 Comparator
인터페이스가 등장합니다.
import java.util.Comparator;
public class GameNameComparator implements Comparator<Game> {
@Override
public int compare(Game game1, Game game2) {
// 게임 이름을 기준으로 비교하는 메서드 구현
return game1.getName().compareTo(game2.getName());
}
}
여기에서는 이름을 기준으로 Game
객체를 비교하는 특정 Comparator
를 만들었습니다.
이 Comparator
를 사용하려면:
List<Game> games = new ArrayList<>();
// 목록 채우기...
// GameNameComparator를 사용하여 이름으로 정렬
Collections.sort(games, new GameNameComparator());
이제 games
목록은 게임 이름을 기준으로 알파벳순으로 정렬됩니다.
주요 내용:
Comparable
인터페이스는 클래스 자체에서 구현되며 객체의 자연 순서를 정의합니다.Comparator
인터페이스는 외부 비교 로직을 제공하여 다양한 기준으로 정렬할 수 있도록 합니다.
compareTo
를 사용하여 자연 순서를 정의하고 Comparator
를 사용하여 사용자 정의 순서를 정의하는 시점을 이해하면 더 유연하고 다양한 코드를 작성할 수 있습니다.
728x90
'Java' 카테고리의 다른 글
[Java] 함수형 인터페이스 (Functional Interfaces) (1) | 2024.01.10 |
---|---|
[Java] 제네릭스 와일드카드 (0) | 2024.01.10 |
[Java] 추상클래스와 인터페이스의 차이_2 (0) | 2024.01.04 |
[Java] iterator의 동작 방식 (0) | 2024.01.03 |
[Java] Hashmap에서 entryset을 사용하는 이유 (1) | 2024.01.03 |