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 | 29 | 30 |
Tags
- 연습문제
- LV0
- 프로그래머스
- CoffiesVol.02
- 알고리즘
- Java
- Join
- LV.02
- docker
- LV1
- 데이터 베이스
- LV01
- SQL
- Til
- Redis
- 포트 폴리오
- Spring Frame Work
- 포트폴리오
- 코테
- 배열
- 네트워크
- mysql
- JPA
- LV02
- jpa blog
- Lv.0
- LV03
- 이것이 자바다
- 일정관리프로젝트
- 디자인 패턴
Archives
- Today
- Total
코드 저장소.
객체 비교를 위한 Comparator , Comparable 본문
목차
1.Comparable 인터페이스
2.Comparator 인터페이스
1.Comparable 인터페이스
Comparable 인터페이스는 객체 자신이 기본 정렬 방식을 정의할 때 사용됩니다. 즉, 특정 객체가 어떻게 비교될 것인지(순서 지정)를 해당 클래스 내에서 직접 정의합니다.
Comparable 인터페이스의 특징
- compareTo() 메서드를 오버라이드하여 비교 로직을 정의함
- 같은 타입의 객체끼리 비교 가능
- 자연 정렬(Natural Ordering)을 제공
- Collections.sort()에서 사용 가능
Comparable을 사용한 예시
import java.util.*;
class Person implements Comparable<Person> {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person other) {
return Integer.compare(this.age, other.age); // 나이를 기준으로 오름차순 정렬
}
@Override
public String toString() {
return name + " (" + age + ")";
}
}
public class ComparableExample {
public static void main(String[] args) {
List<Person> people = new ArrayList<>();
people.add(new Person("Alice", 30));
people.add(new Person("Bob", 25));
people.add(new Person("Charlie", 35));
Collections.sort(people); // Comparable 기준 (나이 오름차순)으로 정렬
System.out.println(people);
}
}
출력 결과
[Bob (25), Alice (30), Charlie (35)]
위 예제에서 Person 클래스는 Comparable<Person>을 구현하여 compareTo() 메서드를 오버라이드했습니다. 따라서 Collections.sort()를 호출하면 자동으로 나이를 기준으로 오름차순 정렬됩니다.
2.Comparator 인터페이스
Comparator 인터페이스는 객체의 정렬 방식을 외부에서 정의할 때 사용됩니다. 즉, 같은 클래스의 객체라도 여러 기준으로 정렬해야 하는 경우에 활용됩니다.
Comparator 인터페이스의 특징
- compare() 메서드를 오버라이드하여 비교 로직을 정의함
- 동일한 객체에 대해 여러 개의 정렬 기준을 적용할 수 있음
- Collections.sort() 또는 List.sort()에서 사용 가능
- 기존 클래스에 변경 없이 새로운 정렬 기준을 적용할 수 있음
Comparator 의 예시
import java.util.*;
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return name + " (" + age + ")";
}
}
// 나이 기준 정렬
class AgeComparator implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
return Integer.compare(p1.getAge(), p2.getAge());
}
}
// 이름 기준 정렬
class NameComparator implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
return p1.getName().compareTo(p2.getName());
}
}
public class ComparatorExample {
public static void main(String[] args) {
List<Person> people = new ArrayList<>();
people.add(new Person("Alice", 30));
people.add(new Person("Bob", 25));
people.add(new Person("Charlie", 35));
// 나이 기준 정렬
Collections.sort(people, new AgeComparator());
System.out.println("나이 기준 정렬: " + people);
// 이름 기준 정렬
Collections.sort(people, new NameComparator());
System.out.println("이름 기준 정렬: " + people);
}
}
출력 결과
나이 기준 정렬: [Bob (25), Alice (30), Charlie (35)]
이름 기준 정렬: [Alice (30), Bob (25), Charlie (35)]
위 코드에서는 AgeComparator와 NameComparator를 각각 만들어서 나이 기준 정렬과 이름 기준 정렬을 다르게 적용했습니다.
'Java' 카테고리의 다른 글
JVM 내부구조와 동작원리 (0) | 2024.05.02 |
---|---|
[이것이 자바다] ch.15 컬렉션 프레임 워크 연습문제 (0) | 2023.08.23 |
[이것이 자바다] Chapter.16 람다/스트림 연습문제 (0) | 2023.08.05 |
[이것이 자바다] 챕터07 연습문제 (0) | 2023.03.15 |
[이것이 자바다] Chpater06. 확인문제 (0) | 2023.03.15 |