[JAVA] String에서의 equals(), compareTo() 차이

JHJeong·2024년 4월 16일
0

String 클래스의 equals()와 compareTo() 메소드의 차이를 알아보자.
이 두 메소드는 비슷한 기능을 수행하는 것 처럼 보일 수 있지만, 사용 목적과 동작 방식에 있어서 중요한 차이점이 있다.

1. equals() 메소드

'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를 반환한다.

2. compareTo() 메소드

compareTo() 메소드는 Comparable 인터페이스의 일부로 정의되어 있으며, 두 문자열을 사전순으로 비교한다. 이 메소드는 문자열이 사전순으로 동일한지, 앞서는지, 또는 뒤쳐지는지를 나타내는 정수를 반환한다. 반환 값은 다음과 같다.

  • 0 : 두 문자열이 사전순으로 같은 경우
  • 양의 정수 : 호출 객체가 매개변수로 전달된 객체보다 사전 순으로 뒤에 올 경우
  • 음의 정소 : 호출 객체가 매개변수로 전달된 객체보다 사전 순으로 앞에 올 경우
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() 는 문자열을 사전순으로 정렬하는데 유용하며, 문자열 간의 상대적 순서를 나타내는 정수 값을 반환한다. 이 두 메소드의 올바른 이해와 사용은 효과적인 문자열 처리와 데이터 구조 운용에 중요하다.

profile
이것저것하고 싶은 개발자

0개의 댓글