본문 바로가기
Java

[JAVA] Comparable 이란?

by onejunu 2021. 2. 19.

 

 

Comparable = 기본적인 정렬기준을 구현

 


 

- Comparable 

 

저게 끝이다. 자바에서 정렬이 가능한 객체는 모두 Comparable 을 구현하고 있다.

 

아래의 코드를 보자.

 

 

 

우리가 흔히 쓰는 Arrays.sort();   도 역시 Comparable 을 구현한 클래스에 대해서 작동한다.

아래 코드를 보면 Integer 클래스는  인터페이스 Comparable<Integer> 를 구현했다.

 

 

 

- Comparable 구현 예시 

 

Student 클래스를 하나 정의하자. 

height 는 키이고 score는 점수다.

 

 

그리고 Arrays.sort(); 를 이용해 정렬해보자.

 

 

그러면 아래와 같은 에러가 뜰것이다.

 

요약하면 Comparable를 구현하지 않은 클래스의 정렬을 시도해서 생겼다. 즉 정렬가능한 객체가 아니라는 소리다.

정렬가능하도록 Student 클래스를 수정해보자.

Student 클래스를 새로 만들고 기본정렬을 height 에 대해 오름차순으로 정렬하도록 하였다.

 

height를 오름차순으로 정렬하기 위해서 반환값

- 비교하는 height가 더 크다면 -1

- 비교하는 height가 더 작다면 1

- 비교하는 height가 같다면 0

 

이렇게 클래스를 완성하면 이제 Student는 height를 오름차순으로 정렬가능한 객체가 되었다. 즉, 기본정렬 기준으로 height를 오름차순으로 한 것이다. 

 

main함수를 그대로 유지한 채로 프로그램을 실행하면 아래와 같은 결과를 얻는다.

 

 

 

height에 대해 내림차순으로 정렬해보자. 그러기 위해서 Student클래스의 compareTo 함수를 아래처럼 바꾼다.

 

다른점이 있는가? 바로 return 값에 -1을 곱한 것이다. 그러면 오름차순의 역으로 다시 정렬 된다. 결과는 아래처럼 나온다.

 

 

 

- height를 오름차순으로 정렬하고 height가 같다면 score를 내림차순으로 정렬하기

중복된 height를 만들기 위해 main함수를 아래 처럼 수정한다.

 

그리고 compareTo 를 아래처럼 한뒤 프로그램을 실행해보자.

 

height에 대해서 오름차순으로 정렬되었지만 원하는 결과는 아니다.

우리는 height가 같은 경우!!! 에만 따로 처리해주면 된다.

 

기존 코드는 유지한채로 height 가 같은 부분만 따로 빼서 아래의 코드처럼 작성해주면된다. 

 

 

height가 106인 경우 score가 내림차순으로 잘 정렬되었다.

댓글