[java] Apache Commons Lang 을 사용하여 객체를 비교하는 방법

Apache Commons Lang은 Java 언어로 작성된 유용한 유틸리티 클래스들을 제공하는 Apache 소프트웨어 재단의 프로젝트입니다. 이번 포스트에서는 Apache Commons Lang을 사용하여 Java에서 객체를 비교하는 방법에 대해 알아보겠습니다.

객체 비교하기

Java에서 두 개의 객체를 비교하기 위해서는 equals() 메서드를 사용합니다. 하지만, 기본적인 equals() 메서드는 객체의 참조값을 비교하기 때문에, 객체의 필드 값을 비교하려면 추가적인 작업이 필요합니다. Apache Commons Lang의 EqualsBuilder 클래스는 이러한 작업을 간편하게 수행할 수 있도록 도와줍니다.

아래의 예제 코드를 통해 Apache Commons Lang의 EqualsBuilder를 사용한 객체 비교 방법을 살펴보겠습니다.

import org.apache.commons.lang3.builder.EqualsBuilder;

public class Person {
    private String name;
    private int age;

    // 생략된 생성자, getter, setter

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Person)) return false;

        Person person = (Person) o;

        return new EqualsBuilder()
                .append(name, person.name)
                .append(age, person.age)
                .isEquals();
    }

    // 생략된 hashCode() 메서드
}

위의 예제에서는 Person 클래스의 equals() 메서드를 오버라이딩하여 Apache Commons Lang의 EqualsBuilder를 사용하고 있습니다. EqualsBuilderappend() 메서드를 사용하여 필드를 하나씩 비교하고, isEquals() 메서드를 통해 최종 결과를 반환합니다.

테스트하기

이제 객체 비교를 테스트하는 코드를 작성해보겠습니다.

public class Main {
    public static void main(String[] args) {
        Person person1 = new Person("Alice", 25);
        Person person2 = new Person("Alice", 25);
        Person person3 = new Person("Bob", 30);

        System.out.println(person1.equals(person2)); // true
        System.out.println(person1.equals(person3)); // false
    }
}

위의 테스트 코드에서는 Person 객체를 생성하고, 두 객체를 비교한 결과를 출력하고 있습니다. 첫 번째와 두 번째 객체는 필드 값이 동일하기 때문에 equals() 메서드는 true를 반환하고, 세 번째 객체는 필드 값이 다르기 때문에 false를 반환합니다.

결론

Apache Commons Lang의 EqualsBuilder 클래스를 사용하면 Java에서 객체를 비교하는 작업을 간편하게 수행할 수 있습니다. EqualsBuilder를 사용하여 객체의 필드 값을 비교하면서 equals() 메서드를 오버라이딩하는 방법은 코드의 가독성과 유지보수성을 높일 수 있습니다.

참고 자료