SeouliteLab

[Java/자바] 객체 비교 (==, equals, Comparable, Comparator) 예제 & 설명 본문

프로그래밍

[Java/자바] 객체 비교 (==, equals, Comparable, Comparator) 예제 & 설명

Seoulite Lab 2024. 3. 19. 11:26

자바에서 객체를 비교하는 방법에는 다양한 방법이 있습니다. 이 글에서는 '==' 연산자, equals 메서드, Comparable 인터페이스, Comparator 인터페이스를 중심으로 설명하고, 각각의 예제를 통해 구체적으로 살펴보겠습니다.

1. '==' 연산자

'==' 연산자는 참조 변수가 참조하고 있는 객체의 주소값을 비교합니다. 즉, 두 객체가 동일한 객체인지를 확인합니다.

String str1 = new String("Hello");
String str2 = new String("Hello");
boolean result = (str1 == str2);
System.out.println(result);  // 출력 결과: false

위 예제에서 str1과 str2는 각각 새로운 객체를 생성하였으므로, '==' 연산자로 비교할 때 false가 출력됩니다.

2. equals 메서드

equals 메서드는 객체의 내용을 비교합니다. 따라서 두 객체가 동일한 값을 가지고 있는지를 확인할 수 있습니다.

String str1 = new String("Hello");
String str2 = new String("Hello");
boolean result = str1.equals(str2);
System.out.println(result);  // 출력 결과: true

위 예제에서 equals 메서드를 사용하여 두 문자열 객체의 내용을 비교했기 때문에 true가 출력됩니다.

3. Comparable 인터페이스

Comparable 인터페이스는 객체의 기본 정렬 기준을 제공합니다. 객체 자신과 다른 객체를 비교할 수 있는 compareTo 메서드를 구현해야 합니다.

import java.util.*;

class Student implements Comparable<Student> {
    private int id;
    private String name;

    public Student(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int compareTo(Student s) {
        return this.id - s.id;
    }
}

public class Main {
    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        students.add(new Student(3, "Alice"));
        students.add(new Student(1, "Bob"));
        students.add(new Student(2, "Charlie"));
        Collections.sort(students);
        for (Student s : students) {
            System.out.println(s.id + " " + s.name);
        }
    }
}

위 예제는 학생 객체를 정렬하기 위해 Comparable 인터페이스를 구현한 예시입니다. 학생 객체는 학번을 기준으로 정렬됩니다.

4. Comparator 인터페이스

Comparator 인터페이스는 객체의 정렬 기준을 정의하는 데 사용됩니다. 객체를 직접 수정할 필요 없이 새로운 정렬 기준을 제공할 수 있습니다.

import java.util.*;

class Student {
    private int id;
    private String name;

    public Student(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }
}

class IdComparator implements Comparator<Student> {
    public int compare(Student s1, Student s2) {
        return s1.getId() - s2.getId();
    }
}

public class Main {
    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        students.add(new Student(3, "Alice"));
        students.add(new Student(1, "Bob"));
        students.add(new Student(2, "Charlie"));
        Collections.sort(students, new IdComparator());
        for (Student s : students) {
            System.out.println(s.getId() + " " + s.getName());
        }
    }
}