자바(JAVA) 기초 함께 알아보자

자바(JAVA) 기초 함께 알아보자(28) - Comparator

jay_the_code 2025. 2. 15. 14:00

지난번 Collections 클래스에 이어서

이번글에서는 Comparator에 대해서

알아보겠습니다.

 

사실 Comparator는 Collections클래스와

아주 연관이 깊은 인터페이스입니다.

Comparator

 

이해를 위해 간단한 예시를 들어보겠습니다.

 

만약에 숫자가 아닌 String을 비교한다고

가정해 보겠습니다.

 

Brown, Tomas

Swift, Taylor

Brown, Chris

Lee, Bruce

 

위 명단이 있다고 생각을 해봤을 때

나머지 사람들을 abc순으로 나열하는데

문제가 없지만 Tomas Brown과 Chris Brown은

성이 Brown으로 같기 때문에

성으로 나열할 때 JAVA코드에서 어떤 사람을

먼저 나타내야 할지 모르는 상황이 생깁니다.

 

이를 해결하기 위해 Comparator를 사용해서

비교하는 순서를 지정해 주는 역할을 합니다.

 

아래 코드를 한번 살펴보겠습니다.

import java.util.Comparator;

class Member{
	String firstName, lastName;
    int entryNum;
    
    Member(String firstName, String lastName, int entryNum){
    	this.firstName = firstName;
        this.lastName = lastName;
        this.entryNum = entryNum;
    }
    
    @Override
    public String toString(){
    	return this.lastName + ", " + this.firstName + ", entryNum: " + this.entryNum;
    }
    
    String getLastName(){
    	return this.lastName;
    }
    
    String getFirstName(){
    	return this.firstName;
    }
    
    static final Comparator<Member> comparator =
    	Comparator.comparing(Member::getLastName).thenComparing(Member::getFirstName);
}

 

우선 Comparator를 사용하기 위해서는

비교할 값을 return 해주는 메서드들을

클래스 내에 만들어야 합니다.

 

그 후에 static final로 Comparator를 선언하고

<> 안에는 비교대상인 클래스명을 적어줍니다.

 

먼저 비교할 것을 comparing()에 그리고

나중에 비교할 것을 thenComparing()에

작성하면 사용할 준비는 모두 끝이 납니다.

Member m0 = new Member("Tomas", "Brown", 1);
Member m1 = new Member("Taylor", "Swift", 13);
Member m2 = new Member("Chris", "Brown", 73);
Member m3 = new Member("Bruce", "Lee", 7);

Member[] members = {m0, m1, m2, m3};
ArrayList<Member> arrayList = new ArrayList<>(Arrays.asList(members));

Collections.sort(arrayList, Member.comparator);

for (Member m : arrayList){
	System.out.println(" - " + m);
}

 

위 코드처럼 Comparator는 sort와 함께

사용합니다.

 

위 코드를 실행시켜 보면 아래와 같이

설정한 대로 정렬이 되는 모습을 확인할 수

있습니다.

 

이때 기본적으로 오름차순으로 정렬을 해주지만

내림차순으로 정렬하고 싶다면

comparing() 또는 thanComparing() 뒤에

comparing().reversed()와 같이

reversed()를 사용해 줍니다.

 

그럼 지금까지 Comparator에 대해서 알아보았습니다.

 

Collections와 Comparator를 적절히 사용한다면

다양한 데이터 타입이 모여있는 배열에서도

원하는 대로 정렬하는 것이 가능합니다.

 

Comparator를 마지막으로 자바 기초는

여기서 마무리하도록 하겠습니다!