String 클래스의 equals()와 compareTo() 메소드의 차이를 알아보자.
이 두 메소드는 비슷한 기능을 수행하는 것 처럼 보일 수 있지만, 사용 목적과 동작 방식에 있어서 중요한 차이점이 있다.
'Object' 클래스에서 상속받은 메소드로, 두 객체의 동등성을 비교한다. String 클래스에서 이 메서도는 두 문자열의 내용이 정확히 같은지 비교하여, 같다면 'true', 다르다면 'false'를 반환한다.
equals()는 주로 두 문자열이 글자와 순서까지 완전히 동일한지 확인할 때 사용된다.
public class EqualsExample {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "hello";
String s3 = "HELLO";
System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
}
}
출력 결과
true
false
위 예제에서 s1과 s2는 내용이 같으므로 true를 반환하고, s1과 s3는 대소문자가 다르므로 false를 반환한다.
compareTo() 메소드는 Comparable 인터페이스의 일부로 정의되어 있으며, 두 문자열을 사전순으로 비교한다. 이 메소드는 문자열이 사전순으로 동일한지, 앞서는지, 또는 뒤쳐지는지를 나타내는 정수를 반환한다. 반환 값은 다음과 같다.
public class CompareToExample {
public static void main(String[] args) {
String s1 = "apple";
String s2 = "banana";
String s3 = "apple";
System.out.println(s1.compareTo(s2));
System.out.println(s1.compareTo(s3));
System.out.println(s2.compareTo(s1));
}
}
출력 결과
-1
0
1
compareTo() 메소드는 사적적으로 문자열을 비교할 때 문자간의 차이를 반환한다. 그 결과는 단순히 -1, 0, 1로 제한되지 않고, 실제 유니코드 값 차이를 반영할 수 있다. 예를 들어 문자열 내의 특정 문자가 다른 문자열의 해당 위치에 있는 문자와 유니코드 값에서 차이가 나는 경우, 그 차이는 compareTo() 메소드의 반환 값에 직접적으로 영향을 주게 된다.
아래 예제는 compareTo() 메소드가 -2, 2를 반환하는 경우를 보여준다.
public class CompareToExample {
public static void main(String[] args) {
String str1 = "abc";
String str2 = "abd";
String str3 = "abb";
// str1 vs str2: 'c' (99 in ASCII) vs 'd' (100 in ASCII)
System.out.println(str1.compareTo(str2)); // Output: -1 ('c'와 'd'의 차이)
// str2 vs str1: 'd' (100 in ASCII) vs 'c' (99 in ASCII)
System.out.println(str2.compareTo(str1)); // Output: 1 ('d'와 'c'의 차이)
// ASCII 값 차이가 2인 경우의 예제
String str4 = "axe";
String str5 = "aze";
// str4 vs str5: 'x' (120 in ASCII) vs 'z' (122 in ASCII)
System.out.println(str4.compareTo(str5)); // Output: -2 ('x'와 'z'의 차이)
// str5 vs str4: 'z' (122 in ASCII) vs 'x' (120 in ASCII)
System.out.println(str5.compareTo(str4)); // Output: 2 ('z'와 'x'의 차이)
}
}
출력 결과
-1
1
-2
2
이 예제에서는 두 문자열의 각 문자를 비교하여 그 차이를 출력한다. str4와 str5를 비교할 때, 첫 번째 두 문자('a'와 'a')는 동일하고, 세번째 문자에서 'x'와 'z'사이에 유니코드 차이가 2만큼 나타낸다. 이 차이는 compareTo() 메소드의 결과로 직접 반영된다.
equals()와 compareTo()는 자바에서 문자열을 비교하는데 사용되지만, 그 목적과 구현이 다르다. equals()는 문자열의 절대적인 동등성을 확인하는데 사용하고, 결과는 Boolean 값이고, compareTo() 는 문자열을 사전순으로 정렬하는데 유용하며, 문자열 간의 상대적 순서를 나타내는 정수 값을 반환한다. 이 두 메소드의 올바른 이해와 사용은 효과적인 문자열 처리와 데이터 구조 운용에 중요하다.