Comparable vs Comparator
공통점
- 인터페이스이다.
- 두 객체를 비교하기 위한 인터페이스이다
1) Comparable
1
2
3
4
5
6
7
8
public interfacle Comparable<T>{
@Override
public int compareTo(Type o){} // 비교값에 대해 설정
}
객체 a;
객체 b;
int res = a.compareTo(b); // a와 b를 비교
- 자신과 매개 변수를 비교
- 매개변수와 비교하여 본인 더 크면 양수, 같으면 0, 작으면 음수 형태로 반환하는게 일반적
2) Comparator
1
2
3
4
5
6
7
8
9
10
11
12
public interfacle Comparator<T>{
@Override
public int compare(Type o1, Type o2){} // 비교값과 반환값 설정
}
객체 a;
객체 b;
객체 c;
int res = a.compare(b, c); // a와 상관없이 b와 c를 비교
=> a의 필요성이 없는데 사용되고, 일관성이 떨어짐.
=> 익명 클래스를 사용한다
- 매개 변수끼리 비교하여 반환
- 두 매개 변수를 비교하여 결과 값 반환
익명 클래스 : 선언과 동시에 @Override하여 사용.
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
일반적인 객체 생성 public static void main(String[] args){ Human h = new Human(); Student std = new Student(); System.out.println(h.sum()); System.out.println(std.sum()); } public class Human { int power = 50; int sensitivity = 50; @Override public int sum(){ return power + sensitivity; } } public class Student extends Human{ int sensitivePower = 100; @Override public int sum(){ return power + sensitivity + sensitivePower; } }
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
익명 클래스 사용 public static void main(String[] args){ Human h = new Human(); Human student = new Human(){ int sensitivePower = 100; @Override public int sum(){ return power + sensitivity + sensitivePower; } } System.out.println(h.sum()); System.out.println(student.sum()); } public class Human { int power = 50; int sensitivity = 50; @Override public int sum(){ return power + sensitivity; } }