JAVA/Spring

AssertThat의 isEqualTo와 isSameAs의 차이점 알아보기

min민 2024. 12. 17.

AssertThat의 isEqualTo와 isSameAs의 차이점 알아보기

 

테스트 코드를 작성할 때, AssertJ 라이브러리를 많이 사용하게 된다. 특히 assertThat 메서드와 함께 자주 사용되는 isEqualTo와 isSameAs는 헷갈리기 쉬운 부분이다. 이 두 메서드는 비슷해 보이지만 실제로는 중요한 차이점이 있다. 오늘은 isEqualTo와 isSameAs가 각각 어떤 역할을 하는지, 차이점은 무엇인지 명확하게 정리해보겠다.

 

1. isEqualTo란? (값 비교)

**isEqualTo**는 두 객체의 값이 같은지를 확인한다. 여기서 값이 같다는 것은 equals() 메서드를 기준으로 판단한다는 의미다. 즉, 두 객체의 내용이 같은지 검사한다.

 

예시 코드:

String a = new String("Hello");
String b = new String("Hello");

assertThat(a).isEqualTo(b);  // 성공

위 코드에서 a와 b는 서로 다른 객체지만, 내용(값)이 동일하기 때문에 isEqualTo를 사용하면 테스트가 성공한다.

 

2. isSameAs란? (참조 비교)

**isSameAs**는 두 객체의 참조가 같은지를 확인한다. 다시 말해, 두 객체가 동일한 메모리 주소를 가리키는지를 검사한다.

 

예시 코드:

String a = "Hello";
String b = a;

assertThat(a).isSameAs(b);  // 성공

 

여기서 a와 b는 동일한 객체를 참조하기 때문에 isSameAs를 사용하면 테스트가 성공한다.

 

그러나 아래 코드를 살펴보자:

String a = new String("Hello");
String b = new String("Hello");

assertThat(a).isSameAs(b);  // 실패

a와 b는 값은 같지만 서로 다른 객체이므로 isSameAs는 실패하게 된다.

 

3. isEqualTo vs isSameAs 요약

메서드 비교 기준 설명
isEqualTo 값(내용) 비교 equals() 메서드를 사용
isSameAs 참조(주소) 비교 메모리 주소가 같은지 검사

 

간단히 말해서:

  • isEqualTo는 내용이 같은지 확인한다.
  • isSameAs는 동일한 객체인지 확인한다.

 

4. 실제 사용 시 주의할 점

  • 객체의 내용만 중요하다면 isEqualTo를 사용하면 된다.
  • 반면, 객체가 정확히 동일한지 확인해야 할 때는 isSameAs를 사용해야 한다.
  • 컬렉션이나 도메인 객체의 동등성 검사에서 실수하지 않으려면 equals() 메서드를 적절히 오버라이드하는 것도 중요하다.

 

총 정리

isEqualTo와 isSameAs는 테스트 코드에서 비슷해 보이지만, 실제로는 비교의 기준이 다르다. 값을 확인하려면 isEqualTo, **참조를 확인하려면 isSameAs**를 사용하자. 이 차이를 이해하고 적재적소에 사용한다면, 더 명확하고 정확한 테스트 코드를 작성할 수 있다.

댓글