본문 바로가기

dev/자바

Comparator&Comparable 인터페이스

자바에서 객체를 정렬할 때

 

Comparator 인터페이스와 Comparable 인터페이스를 자주 사용합니다.

 

두 인터페이스의 차이점에 대해 알아보겠습니다.

 

TestObj 클래스

 

TestObjComparator 클래스

 

먼저 Comparator 인터페이스는 정렬하는 메소드가 객체에 있지 않습니다.

 

Comparator 인터페이스를 구현한 TestObjComparator 클래스는 정렬 메소드 compare를 재정의하고 있습니다.

 

Comparator 인터페이스 구현할 때 TestObj 클래스를 제너릭으로 받아서

 

TestObj의 속성 val1과 val2를 기준으로 오름차순으로 정렬하고 있습니다.

 

먼저 val1 기준으로 오름차순으로 정렬하고, val1이 같은 경우 val2 기준으로 오름차순으로 정렬합니다.

 

Comparator 실행 예제

 

 

TestObj 객체를 생성한 뒤 리스트에 추가하고

 

TestObjComparator를 통해 Collections.sort로 정렬하고 있습니다.

 

다음으로 Comparable를 살펴보겠습니다.

 

TestObj 클래스

 

Comparable 인터페이스를 구현한 객체는 정렬하는 메소드가 객체 안에 있습니다.

 

정렬하는 로직은 앞의 메소드와 똑같이 val1과 val2를 기준으로 오름차순으로 정렬하고 있습니다.

 

Comparable 실행 예제

 

TestObj 객체를 생성한 뒤 리스트에 추가하고

 

Comparable을 구현한 TestObj 객체 compareTo 메소드를  통해 Collections.sort로 정렬하고 있습니다.

 

정리하면 Comparator 인터페이스와 Comparable 인터페이스의 차이점은 정렬하는 메소드를 어디에 구현하느냐입니다.

 

객체 밖에 정의하려면 Comparator 인터페이스, 안에 정의하려면 Comparable 인터페이스를 사용하면 됩니다.

 

즉 정렬 기준이 다양하고 복잡하다면 Comparator 인터페이스, 그렇지 않다면 Comparable 인터페이스를 사용해서 개발하는 것이 좋습니다.

'dev > 자바' 카테고리의 다른 글

JDK 11 FileReader Encoding  (0) 2024.04.22
Java List Stream  (0) 2023.08.29
csv parsing lambda stream  (0) 2023.06.08
Domain 객체 메모리  (0) 2023.05.18
Java Builder 패턴  (0) 2023.05.17