Java에서는 객체 간 비교를 위해 compareTo() 메서드를 제공한다. 이 메서드는 두 객체를 비교하여 정렬 순서를 결정하거나, 두 객체가 동일한지 확인하는 데 사용된다. compareTo() 메서드의 사용 방법과 예제 코드를 소개하고, 문자열 뿐만 아니라 숫자, 날짜 등 모든 비교 경우에 대한 동작에 대해 알아본다.
compareTo() 메서드 반환 값
0을 반환: 두 객체가 동일한 경우
음수를 반환: 기준 객체가 비교대상 객체보다 작은 경우
양수를 반환: 기준 객체가 비교 대상 객체보다 큰 경우
compareTo() 예제 코드
import java.time.LocalDate;
public class CompareToExample {
public static void main(String[] args) {
// 문자열 비교
String str1 = "apple";
String str2 = "cherry";
int result1 = str1.compareTo(str2);
// 숫자 비교
Integer num1 = 10;
Integer num2 = 5;
int result2 = num1.compareTo(num2);
// 날짜 비교
LocalDate date1 = LocalDate.of(2023, 1, 1);
LocalDate date2 = LocalDate.of(2022, 12, 29);
int result3 = date1.compareTo(date2);
System.out.println("String comparison result: " + result1);
System.out.println("Number comparison result: " + result2);
System.out.println("Date comparison result: " + result3);
}
}
/* 출력 결과
String comparison result: -2
Number comparison result: 1
Date comparison result: 1
*/
위의 예제 코드에서 문자열 비교에서 str1.compareTo(str2)를 호출하면 'apple'과 'cherry'를 비교한다. 'a'의 유니코드 코드 포인트 값은 'c'의 값보다 작으므로, compareTo() 메서드는 음수 -2 값을 반환한다. 숫자 비교에서는 num1.compareTo(num2)를 호출하여 10과 5를 비교한다. 10이 5보다 크므로 양수 값을 반환한다. 날짜 비교에서는 date1.compareTo(date2)를 호출하여 2023년 1월 1일과 2022년 12월 29일을 비교한다. 2023년 1월 1일이 2022년 12월 29일보다 앞서기에 양수 값을 반환한다.
compareTo() 메서드는 객체의 타입에 따라 달라진다. 문자열의 경우에는 유니코드 코드 포인트 값을 기준으로 비교가 이루어진다. 숫자의 경우에는 값 자체를 비교하며, 날짜의 경우에는 날짜의 선후 관계를 비교한다.
문자열 compareTo() 메서드 동작
public class CompareToStringExample {
public static void main(String[] args) {
// 문자 값 차이
String str1 = "apple";
String str2 = "grape";
int result1 = str1.compareTo(str2);
// 문자 값 차이
String str3 = "apple_z";
String str4 = "apple_a";
int result2 = str3.compareTo(str4);
// 길이 차이
String str5 = "apple";
String str6 = "applejuice";
int result3 = str5.compareTo(str6);
System.out.println("Comparison result1: " + result1);
System.out.println("Comparison result2: " + result2);
System.out.println("Comparison result3: " + result3);
}
}
/* 출력 결과
Comparison result1: -6
Comparison result2: 25
Comparison result3: -5
*/
특히 문자열은 첫 번째 문자부터 순서대로 비교하면서 정렬 순서를 결정한다. 비교는 유니코드 코드 포인트 값을 기준으로 수행된다. 순차적으로 비교시 문자가 서로 다른 경우, 해당 문자의 코드 포인트 값의 차이를 반환한다. 그러나 비교대상 하나의 문자가 모두 동일한 경우, 문자열의 길이 차이에 따라 결과가 결정된다. 길이 차이가 양수인 경우, 첫 번째 문자열이 더 크다고 간주되고, 반대로 길이 차이가 음수인 경우, 첫 번째 문자열이 더 작다고 간주된다.
'알아가기 > Java' 카테고리의 다른 글
[Java] Arrays.stream() 및 Arrays.copyOfRange() 함수 (0) | 2023.08.29 |
---|---|
[Java] 토큰으로 분리하는 StringTokenizer (0) | 2023.08.27 |
[Java] 조회값을 반환하거나 기본값을 반환하는 getOrDefault (0) | 2023.06.15 |
[Java] 중복 없는 해시 HashSet (0) | 2023.05.28 |
[MySQL] 로그인 비밀번호 바꾸기 ver. 8.0.31 (0) | 2023.02.09 |