728x90

개요

자바에서 정렬을 구현할 때 흔히 두 가지 방법을 사용합니다.

  • 뺄셈(-) 연산자를 사용하는 방법
  • Integer.compare()를 사용하는 방법

본 글에서는 각각의 장단점과 주의해야 할 점을 살펴보겠습니다.

 

뺄셈(-) 연산자 사용

// 뺄셈을 사용한 정렬
Arrays.sort(arr, (a, b) -> a - b);

// 다중 조건 정렬의 경우
Arrays.sort(arr, (a, b) -> {
    if (a[0] == b[0]) {
        return a[1] - b[1];
    }
    return a[0] - b[0];
});

장점

  • 코드가 간결함
  • 직관적으로 이해하기 쉬움
  • 작은 수의 범위에서는 문제없이 작동

단점

  • 정수 오버플로우 위험이 있음
  • 큰 수를 다룰 때 예상치 못한 결과가 발생할 수 있음

Integer.compare() 사용

// Integer.compare()를 사용한 정렬
Arrays.sort(arr, (a, b) -> Integer.compare(a, b));

// 다중 조건 정렬의 경우
Arrays.sort(arr, (a, b) -> {
    if (a[0] == b[0]) {
        return Integer.compare(a[1], b[1]);
    }
    return Integer.compare(a[0], b[0]);
});

장점

  • 오버플로우 걱정 없음
  • 안전하고 reliable한 비교 가능
  • 표준 라이브러리 메서드 사용으로 신뢰성 높음

단점

  • 코드가 약간 더 길어짐
  • 성능상 미세한 차이가 있을 수 있음 (실제로는 무시할만한 수준)

 

뺄셈(-) vs Integer.compare()

  • 일반적인 상황
    • 작은 범위의 수를 다룰 때는 두 방법 모두 문제없이 작동
    • 코드의 간결성을 위해 뺄셈을 사용해도 큰 문제 없음
  • 프로덕션 환경
    • 안전성이 중요한 프로덕션 코드에서는 Integer.compare() 사용 권장
    • 예상치 못한 입력값에 대한 방어적 프로그래밍 가능
  • 권장사항
    • 일반적으로 Integer.compare() 사용을 권장
    • 특히 입력값의 범위를 확실히 알 수 없는 경우에는 반드시 Integer.compare() 사용