일단 먼저 == 연산자와 equals()메소드의 차이점을 말하자면
== 연산자는 피연산자의 값과 주소가 같은지 검사한다.
String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
System.out.println(str1 == str2); //true
System.out.println(str1 == str3); //false
equals() 메소드는 피연산자의 내용(값) 같은지를 검사한다
String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
System.out.println(str1.equals(str2)); //true
System.out.println(str1.equals(str3)); //true
equal 메서드는 단순히 값 자체가 정확히 일치하는지 확인한다.
deep.equal 메소드는값 뿐만 아니라 배열의 요소나 객체의 속성 그리고 중첩된 구조까지 고려하여 검사한다. 예시를 보며 이해해보자
it(function () {
const array = [];
expect(array === []).to.equal(false);
expect(array).to.deep.equal([]);
array[0] = 1;
expect(array === [1]).to.equal(false);
expect(array).to.deep.equal([1]);
array[1] = 2;
expect(array).to.deep.equal([1, 2]);
array.push(3);
expect(array).to.deep.equal([1, 2, 3]);
});
예시를 보면 왜 같은 환경인것 같은데 어떤 equal에선 일치성이 false가 나오고 deep.equal에선 일치한다라고 나오는지 의문이 생긴다.
deep.equal은 그 값이 가지고 있는 속성을 분석해서 같은지를 따르기 때문에 본질이 같은지는 신경쓰지 않는다. 참조값의 주소는 다르더라도 값은 같은지를 분석하는것이다. 하지만 equal은 주소가 다른 순간 같다고 생각하지 못하는것이다.