Comparable 인터페이스는 어떤 클래스 객체를 정렬할 때 구현하는 인퍼페이스이다.
코드는 다음과 같다.
public interface Comparable<T> {
int compareTo(T o);
}
여기서 T는 타입 파라미터를 의미하며, 공란으로 남겨두면 기본값인 Object 타입이 들어가게 된다.
공란으로 남겨둘 시 다음과 같이 특정 타입으로 캐스팅을 해주어야 한다.
public class NoTypeParameter implements Comparable{
private int value;
public NoTypeParameter(int pValue) {
this.value = pValue;
}
@Override
public int compareTo(Object arg0) { // 기본값인 Object를 받음
NoTypeParameter other = (NoTypeParameter)arg0; // NoTypeParameter로 형변환을 해주어야 함
return this.value - other.value;
}
}
이와 같이 제네릭 타입을 설정하지 않으면 생기는 문제점 두 가지가 있다.
1. compareTo의 파라미터가 Object, 즉 모든 객체를 받기 때문에 부적합한 객체가 들어갈 수 있다.
2. 형변환을 하는 라인이 추가로 필요하기 때문에 성능면에 있어서 비효율적이다.
제네릭 타입을 설정해주면, 위 두 문제를 해결할 수 있다.
public class TypeParameter implements Comparable<TypeParameter>{
private int value;
public TypeParameter(int pValue) {
this.value = pValue;
}
@Override
public int compareTo(TypeParameter arg0) { // 설정한 TypeParameter를 받음
// 형변환을 할 필요가 없어짐
// TypeParameter other = (TypeParameter)arg0;
return this.value - arg0.value;
}
}
'JAVA' 카테고리의 다른 글
Enumeration Type에 대하여 (0) | 2020.01.05 |
---|---|
포장 클래스와 등호(==) (0) | 2020.01.04 |
추상 클래스 예제 - 운전면허 (0) | 2020.01.03 |
클래스 상속의 함정 (0) | 2020.01.02 |
반복 코드 제거 - Constructor Chaining, Initialization Blocks (0) | 2020.01.01 |