달리는 두딘

[JAVA] compareTo(), 객체 크기 비교 본문

지식노트

[JAVA] compareTo(), 객체 크기 비교

디두딘 2023. 2. 8. 11:21

1. compareTo() 함수

A.compareTo(B)는 문자열, 숫자 등 두개의 객체 A와 B의 크기를 비교하는 함수입니다.

A.compareTo(B)의 결과 값으로 결과 값으로 0, 양수, 음수가 리턴될 수 있으며, 아래와 같은 의미를 갖고 있습니다.

  • 0 : A와 B가 같다
  • 음수 : A가 B보다 작다
  • 양수 : A가 B보다 크다

 

2. 두개의 문자열 비교

아래와 같이 compareTo()를 이용하여 문자열의 크기를 비교할 수 있습니다. 알파벳의 사전적인 순서로 크기를 비교합니다.

public class Example {
    public static void main(String[] args) {

        String str1 = "Hello";
        String str2 = "Hello";
        String str3 = "World";
        String str4 = "Java";

        System.out.println("str1.compareTo(str2) ? " + str1.compareTo(str2));
        System.out.println("str1.compareTo(str3) ? " + str1.compareTo(str3));
        System.out.println("str3.compareTo(str4) ? " + str3.compareTo(str4));
    }
}

결과를 보면, 문자열의 경우 알파벳의 사전적 순서가 뒤에 있을 때 더 큰 값을 갖습니다. 또한, 대문자가 소문자보다 작은 값을 갖습니다.

  • str1과 str2가 같기 때문에 0이 리턴
  • str1과 str3 중에 str1가 더 작기 때문에 음수가 리턴
  • str3과 str4 중에 str1가 더 크기 때문에 양수 리턴
str1.compareTo(str2) ? 0
str1.compareTo(str3) ? -15
str3.compareTo(str4) ? 13

대소문자를 무시하고, 알파벳의 순서만으로 크기를 비교할 때는 compareTo() 대신에 compareToIgnoreCase()를 사용하시면 됩니다.

 

3. 두개의 숫자 비교

Integer, Double 등 숫자 객체도 compareTo() 함수가 있으며, 이 함수로 두개의 숫자를 비교할 수 있습니다.

public class Example {
    public static void main(String[] args) {

        Integer n1 = 5;
        Integer n2 = 10;
        Integer n3 = 5;
        Integer n4 = 0;

        System.out.println("n1.compareTo(n2) ? " + n1.compareTo(n2));
        System.out.println("n1.compareTo(n3) ? " + n1.compareTo(n3));
        System.out.println("n3.compareTo(n4) ? " + n3.compareTo(n4));
    }
}

결과를 보면,

  • n1과 n2 중에 n1이 작기 때문에 음수 리턴
  • n1과 n3가 같기 때문에 0 리턴
  • n3과 n4 중에 n3가 크기 때문에 양수 리턴
n1.compareTo(n2) ? -1
n1.compareTo(n3) ? 0
n3.compareTo(n4) ? 1

4. Custom 클래스 객체 비교

자신이 직접 추가한 클래스도 compareTo() 함수를 이용하여 크기를 비교할 수 있습니다.

아래와 같은 순서로 구현을 해야 합니다.

  • Custom 클래스에 Comparable 인터페이스 구현
  • compareTo() 메소드 구현

compareTo() 메소드를 구현할 때는 두개의 객체의 크기에 따라 0, 음수, 양수가 리턴되도록 해야 합니다. 아래 예제에서는 단순하게 String의 compareTo()의 결과 값을 리턴하도록 했습니다.

```java
public class Example {

    public static class Text implements Comparable<Text> {
        private String mText;

        public Text(String text) {
            mText = text;
        }

        public String getText() {
            return mText;
        }

        @Override
        public int compareTo(Text right) {
            return mText.compareTo(right.getText());
        }
    }

    public static void main(String[] args) {

        Text text1 = new Text("aaa");
        Text text2 = new Text("aaa");

        System.out.println(text1.compareTo(text2));
    }
}

Output:

0

 

 

출처

https://codechacha.com/ko/java-compareto/