TIL 73 | 객체2(원시 값과 객체의 비교)

YB.J·2021년 8월 13일
0

wecode_사전스터디

목록 보기
20/22
post-thumbnail

원시 값과 객체타입(참조타입)의 값을 비교해보자

JS의 자료구조

원시 값과 참조타입(객체타입)의 차이점❗

  • 원시 타입의 값은 변경 불가능한 값이지만 객체(참조)타입의 값, 즉 객체는 변경 가능한 값이다
  • 원시 값을 변수에 할당하면 변수(확보된 메모리 공간)에는 실제 값이 저장된다. 이에 비해 객체를 변수에 할당하면 변수에는 참조 값이 저장된다
  • 원시 값을 갖는 변수를 다른 변수에 할당하면 원본의 원시 값이 복사되어 전달된다. 이에 비해 객체를 가리키는 변수를 다른 변수에 할당하면 원본의 참조 값이 복사되어 전달된다.(참조에 의한 전달)

차이점을 그림으로 그려보자

  • 원시 타입의 값은 변경이 불가능하다. 값을 변경하기 위해서는 변수에 다른 값을 재할당하는 방법 외에는 없다.
  • 객체의 값은 변경이 가능하다.
  • 원시 타입의 값은 할당하면 변수에 실제 값이 저장되며, 원시값을 갖는 변수를 다른 변수에 할당하면 원본의 원시 값이 복사되어 전달된다
  • 객체를 변수에 할당하면 변수에는 참조 값이 저장되며, 객체를 가리키는 변수를 다른 변수에 할당하면 참조 값이 복사되어 전달된다.(참조 값이란? 메모리 주소 값, 참조를 통해 복사한다는 말은 메모리의 주소를 복사한다는 뜻이다)

참조에 의한 전달 방식의 문제점❗

- 두 개의 식별자가 하나의 객체를 공유 : 객체를 가리키는 변수(원본, person)를 다른 변수(사본, copy)에 할당하면 원본의 메모리 주소 값이 복사되어 전달된다. person과 copy는 다른 메모리 주소를 가지고 있지만, 동일한 참조 값을 갖고 있다. 따라서 원본이나 사본 중 어느 한 쪽에서 객체를 변경하면(객체의 프로퍼티 값을 변경하거나 추가, 삭제하면) 서로 영향을 주고받는다.

  • 바로 위의 그림이 이해하는 데에 도움이 될 것이다
let person = {
  name: 'Lee'
};

let copy = person;

console.log(copy) ; // person과 동일한 출력결과

copy.name = 'Kim'; 
person.address = 'Seoul';

console.log(person); // {name: 'Kim', address: 'Seoul'}
console.log(copy); // {name: 'Kim', address: 'Seoul'}
profile
♪(^∇^*) 워-후!!(^∀^*)ノシ

0개의 댓글