11장 - 원시 값과 객체의 비교

Jaeseok0106·2022년 3월 17일
0

자바스크립트공부

목록 보기
7/14

11장. 원시 값과 객체의 비교

원시 타입의 값 -> 변경 불가능한 값, 변수(메모리 공간)에 실제 값이 저장, 다른 변수에 할당하면 원시 값이 복사되어 전달 (값에 의한 전달)

객체(참조) 타입의 값 -> 변경 가능한 값, 변수(메모리 공간)에 참조 값이 저장, 다른 변수에 할당하면 참조 값이 복사되어 전달 (참조에 의한 전달)

  • 원시 값
  1. 원시 값 자체를 변경할 수 없다는 것이지 변수 값을 변경할 수 없다는 것이 아님.
  2. 재할당을 통해 변수 값을 변경할 수 있음.
  3. 원시 값은 어떤 일이 있어도 불변하며, 데이터의 신뢰성을 보장함.
  4. 원시 값을 재할당하면 새로운 메모리 공간을 확보하고 재할당한 값을 저장 후, 변수가 참조하던 메모리 공간의 주소를 변경하는데 이를 불변성이라 함.
  5. 불변성을 갖는 원시 값을 할당한 변수는 재할당 이외에 변수 값을 변경할 수 없다.
  • 문자열과 불변성

자바스크립트의 문자열은 원시 타입이며 변경 불가능함.

let str = "hellow";

str = "bye"

첫번째 줄이 실행되면 문자열 ‘Hello’가 생성되고 식별자 str은 hello가 저장된 메모리 공간을 가리킨다. 그 후 두번째 줄이 실행되면 이전 문자열인 ‘Hello’를 삭제하는 것이 아니라 새로운 문자열인 ‘Bye’를 메모리에 생성하고 식별자 str은 Bye의 메모리 공간을 가리킨다. 메모리 공간에는 Hello와 Bye 둘 다 존재한다.

  • 값에 의한 전달
let score = 80;
let copy = score;

console.log(score);
console.log(copy);

score = 100;

console.log(score);
console.log(copy);

Score 변수에 80을 할당하고, copy 변수에 score 변수의 값을 할당한 후 출력하면 두 변수 모두 80의 값이 나온다. 그 후 score 변수에 100을 재할당하고 출력할 경우에도 copy 변수는 80의 값이 나온다.

처음 Score 변수와 copy 변수에 할당된 80의 값은 다른 메모리 공간에 할당 된 별개의 값인 것이다.

정확히는 변수에 값이 전달되는 것이 아니라 메모리 주소가 전달되는 것이다. 100을 재할당하기 전에는 같은 메모리 공간을 참조하다가, 재할당이 이루어졌을 때 score 변수는 새로운 메모리 주소를 참조한다.

즉, 값을 전달하는 것이 아닌 메모리 주소를 전달하는 것이 핵심이다.

  • 객체의 변경 가능한 값

객체 타입의 값은 변경 가능한 값이다. 객체를 할당한 변수는 재할당 없이 객체를 직접 변경할 수 있다. 즉 재할당이 없이 프로퍼티를 동적으로 추가하고, 갱신하고, 삭제가 가능하다는 이야기다.
단점은 여러 개의 식별자가 하나의 객체를 공유할 수 있다는 것이다.

  • 참조에 의한 전달
let person = {
  name : "AAAAA"
};

let copy = person;

객체가 가리키는 변수를 다른 변수에 할당할 경우 원본의 참조 값이 복사되어 전달되는데 이를 참조에 의한 전달이라고 한다. 두 개의 식별자가 하나의 객체를 공유한다. Person과 copy 의 메모리 주소는 다르지만 동일한 객체를 가리킨다.

이 경우, 어느 한쪽에서 객체를 변경(할당, 추가, 삭제)할 경우 서로 영향을 받는다.

결국, 값에 의한 전달이나 참조에 의한 전달은 메모리 공간에 저장되어 있는 값을 복사하여 전달한다는 점이다. 따라서 자바스크립트에는 참조에 의한 전달은 존재하지 않는다.

0개의 댓글

관련 채용 정보