본문 바로가기
Modern React Deep Dive/01장 리액트 개발을 위해 꼭 알아야 할 자바스크립트

1.1.2 값을 저장하는 방식의 차이

by Whiimsy 2024. 3. 29.

1.1.2 값을 저장하는 방식의 차이

원시 타입과 객체 타입의 가장 큰 차이점

원시 타입

  • 불변 형태의 값으로 저장됨
  • 변수 할당 시점에 메모리 영역 차지하고 저장됨
  • 복사할 때 값을 전달함
  • let hello = 'hello world'
    let hi = hello
    
    console.log(hello === hi) // true
  • 값을 비교하기 때문에, 각각 선언하는 방식으로도 동일한 결과 볼 수 있음
  • let hello = 'hello world'
    let hi = 'hello world'
    
    console.log(hello === hi) // true

객체 타입

  • 프로퍼티를 삭제, 추가, 수정할 수 있으므로 변경 가능한 형태로 저장됨
  • 값이 아닌 참조를 저장함
  • 값을 복사할 때도 값이 아닌 참조를 전달함
  • var hello = {
      greet: 'hello, world',
    }
    
    var hi = {
      greet: 'hello, world',
    }
    
    console.log(hello === hi) // false
    
    // 원시값인 내부 속성값을 비교하면 동일함
    console.log(hello.greet === hi.greet) // true
  • 값을 저장하는 게 아니라 참조를 저장하기 때문에 앞서 동일하게 선언했던 객체라 하더라도 저장하는 순간 다른 참조를 바라보기 때문에 false 반환
  • 반면, 참조를 전달하는 경우 즉, value가 가리키는 주소가 동일하면 true 반환
  • var hello = {
      greet: 'hello, world',
    }
    
    var hi = hello
    
    // hello와 hi 변수는 변수명 및 각 변수명의 주소가 서로 다르지만 value가 가리키는 주소가 동일함
    // 즉, value 값이 hello.greet = "something"과 같이 변경된다 하더라도 hi와 hello 비교는 언제나 true 반환
    console.log(hello === hi) // true
  • 결론: 항상 객체 간에 비교가 발생하면, 이 객체 간의 비교는 우리가 이해하는 내부의 값이 같다 하더라도 결과는 대부분 true가 아닐 수 있다는 것 인지하기