타입에 따른 값 저장 방법
기본적으로 char, int와 같은 기본형 타입은 값을 저장한다.
int num = 1; // 1이라는 값이 저장됨
하지만, Studnet()와 같은 객체는 주소값이 저장된다.
Studnet student1 = new Studnet("mango");
isSameAs
테스트할 때 주로 사용되는 isSameAs는 객체의 주소 기반인 == 비교를 한다. 다음 코드의 출력값을 예상해보자.
int a = 1;
int b = 1;
System.out.println(a==b);
출력값으로 true가 나온다. 그렇다면 a와 b의 객체가 같은 주소를 갖고 있다는 말인가? 그렇지 않다. 자바의 == 연산은 객체가 하나라도 원시형이면 값 비교를 한다. 따라서 a == b가 true로 출력이 되는 것이다.
따라서 이럴 때는 isSameAs를 써도 잘 동작한다. 반면에 다음의 코드를 살펴보자.
Student student1 = new Student("mango");
Student student2 = new Student("mango");
System.out.println(student1 == student2);
출력값으로 false가 나온다. 이는 student1과 studnet2의 객체의 주소가 다르기 때문이다. 따라서 같은지 판단을 하려면 isEqualTo를 사용하여야 한다.
isEqualTo
isEqualTo는 값을 기준으로 비교를 한다. 따라서 만약 Studnet 객체를 비교한다고 하면, Student객체의 속성 중에서 어떤 속성을 기준으로 비교를 할 것인지 정해주어야 한다.
assertThat(student1.name).isEqualTo(student2.name);
정리
isSameAs는 자바의 ==연산과 같으며, 원시형 타입은 값 비교를 하고, 객체는 주소 비교를 한다.
isEqualTo는 값을 기준으로 비교를 한다. 따라서 만약 객체의 값이 같은지 비교하고 싶다면 이를 사용한다.