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**를 사용하자. 이 차이를 이해하고 적재적소에 사용한다면, 더 명확하고 정확한 테스트 코드를 작성할 수 있다.
'JAVA > Spring' 카테고리의 다른 글
[스프링 싱글톤] : 왜 @Bean은 한 번만 호출될까? (0) | 2024.12.20 |
---|---|
[스프링 빈과 싱글톤 패턴: 무상태로 설계해야 하는 이유?] (0) | 2024.12.17 |
스프링 BeanDefinition 완벽 정리: 빈 설정 메타정보 탐구 (0) | 2024.12.16 |
스프링 빈 조회: 부모 타입과 Object 타입의 차이점 (0) | 2024.12.16 |
JAVA SPRING 테스트 코드 작성: JUnit 5에서는 public을 생략해야된다고? 심지어 권장?! (0) | 2024.12.16 |
댓글