type
status
date
slug
summary
tags
category
icon
password
Comparable 과 Comparator 에 대해 간략히 설명하고, Comparator 에 유용한 것들이 있어 따로 소개 하려 한다.
 
자바에서 객체를 Arrays.sort()Collections.sort() 로 정렬하는 방법에는 크게 두 가지가 있다. 
  • Comparable  
  • Comparator 
이 둘의 차이점과 어떻게 사용하면 좋을지에 대해 적어본다.

Comparable

기본 사용법

Comparable 인터페이스는 정렬을 수행할 객체 자체가 구현해야 하는 인터페이스이다.
객체 자체에 정렬 로직이 포함되며, compareTo 메소드를 오버라이드하여 구현한다.
위의 예제에서 Student 클래스는 Comparable 인터페이스를 구현하고 있으며,  compareTo 메소드를 통해 나이를 기준으로 오름차순 정렬을 수행한다.
 

Comparator

Comparator 인터페이스는 정렬을 수행할 별도의 클래스가 구현하는 인터페이스이다. 별도의 정렬 로직을 가진 클래스를 생성할 수 있으며, compare 메소드를 오버라이드하여 구현한다.
위의 예제에서 StudentNameComparator 클래스는 Comparator 인터페이스를 구현하고 있으며, compare 메소드를 통해 이름을 기준으로 오름차순 정렬을 수행한다.
 

오름차순, 내림차순 정렬

Comparator.naturalOrder() , Comparator.reverseOrder() 이걸로 오름차순, 내림차순을 표현할 수 있다.
 

Comparing

Comparing 을 이용하여 객체 내 특정 필드의 값으로만 비교할 수 있다.
 

nullsFirst, nullsLast

정렬 중에 null 이 있으면 NullPointerException 가 발생하는데, 이를 감안하고 연산하기 위해 Comparator 에서 위의 기능을 제공해준다.
이렇게 하면 null 값을 제외한 나머지 값들로 열거를 하고, null 인 값들은 맨 뒤로 보내게 된다. 합격 점수 선발 같은 기능에서 미달자 혹은 열외자는 뒤로 보내어 탈락시키고, 상위권자는 순위를 매길 때 요긴할 것으로 보인다.

Wrapper class 실수 값의 compare

Comparator , Comparable 둘의 비교할때의 공통점은 둘의 비교 후 결과를 int 형태로 반환한다는 것이다.
 
double, float 처럼 소수점으로 정밀 비교를 하고 싶을 때 Wrapper class 내 compare를 이용할 수 있다.
 
예시로 점들 사이에서 서로 가장 가까운 위치를 계산하는 코드이다
 
 
점에 대한 xy 좌표. 그리고 모든 점들에 대한 평균 거리가 담겨있는 객체이다
 
그리고 정렬하는 기준에서 부수적인 요구 사항에 맞게 조건 정렬을 하되, 평균 처리에 대한 계산에서 Double.compare() 를 이용하여 값 비교를 할 수 있다.
 
네트워크 통신 방식깔금한 테스트 코드를 짜기 위한 전략
Loading...