equal 메서드와 deep.equal 메서드의 차이

Balsamic·2023년 5월 4일
0

코딩공부

목록 보기
11/11
post-custom-banner

일단 먼저 == 연산자와 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 메서드

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은 주소가 다른 순간 같다고 생각하지 못하는것이다.

post-custom-banner

0개의 댓글