모던 자바스크립트 Deep Dive 11장 정리 - 원시 값과 객체의 비교

Hyodduru ·2022년 5월 22일
0
post-thumbnail

11장 원시 값과 객체의 비교

🧐 원시 타입과 객체 타입 차이점 3가지

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

11.1 원시 값

🧚‍♀️ 변경 불가능한 값

변경 불가능 하다는 것은 변수가 아니라 값에 대한 진술

🧐 값의 재할당에서 변수가 참조하던 메모리 공간의 주소가 변경되는 이유?

변수에 할당된 원시 값이 변경 불가능한 값이기 때문이다.

🧐 값의 특성중 하나인 불변성이란?

변수 값을 변경하기 위해 원시 값을 재할당하면 새로운 메모리 공간을 확보하고 재할당한 값을 저장한 후, 변수가 참조하던 메모리 공간의 주소를 변경하는 것

👉 불변성을 갖는 원시 값을 할당한 변수는 재할당 이외에 변수 값을 변경할 수 있는 방법이 없다.

🧚‍♀️ 문자열과 불변성

🧐 유사배열 객체란?

마치 배열처럼 인덱스로 프로퍼티 값에 접근할 수 있고 length 프로퍼티를 갖는 객체를 말함.
ex) 문자열은 마치 배열처럼 인덱스를 통해 각 문자에 접근할 수 있으며 length 프로퍼티를 갖기 때문에 유사 배열 객체이고 for문으로 순회할 수 도 있음.

🧐 유사배열인 문자열과 실제 배열의 차이점?

유사배열인 문자열은 배열과 유사하게 인덱스를 사용해 각 문자에 접근할 수 있지만 문자열은 원시 값이므로 값을 변경할 수 없음. 참고로 이때 에러가 발생하지는 않음.

🧚‍ 값에 의한 전달

🧐 값에 의한 전달이란?

변수에 원시 값을 갖는 변수를 할당하면 할당받는 변수에는 할당되는 변수의 원시 값의 메모리 주소를 전달하는 것. 전달된 메모리 주소를 통해 메모리 공간에 접근하면 값을 참조할 수 있다.

참고로 복사된 변수와 원본 변수의 값은 다른 메모리 공간에 저장된 별개의 값이다.

🔖 값에 의한 전달은 사실은 자바스크립트를 위한 용어는 아님. 좀 더 엄격하게 표현하면 변수에는 값이 전달되는 것이 아니라 메모리 주소가 전달되기 때문. 이는 변수와 같은 식별자는 값이 아니라 메모리 주소를 기억하고 있기 때문!

👉 두 변수의 원시 값은 서로 다른 메모리 공간에 저장된 별개의 값이 되어 어느 한쪽에서 재할당을 통해 값을 변경하더라도 서로 간섭할 수 없음!

11.2 객체

🧐 자바스크립트의 객체 관리방식 자바나 C++과 같은 객체지향 프로그래밍 언어와 차이는?

✔️ 객체지향 프로그래밍 언어 : 사전에 정의된 클래스를 기반으로 객체(인스턴스)를 생성한다. 객체를 생성하기 이전에 이미 프로퍼티와 메서드가 정해져 있으며 그대로 객체를 생성. 객체가 생성된 이후에는 프로퍼티 삭제나 추가 불가능
✔️ 자바스크립트 : 클래스 없이 객체 생성할 수 있음, 생성된 이후 동적으로 프로퍼티와 메서드 추가 가능.

🧚‍ 변경 가능한 값

🧐 참조 값이란?

생성된 객체가 저장된 메모리 공간의 주소, 그 자체

객체를 할당한 변수는 재할당 없이 객체를 직접 변경할 수 있다. 즉 재할당 없이 프로퍼티를 동적으로 추가할 수도 있고 프로퍼티 값을 갱신할 수도 있으며 프로퍼티 자체를 삭제할 수도 있다.

객체의 단점중 하나로는 여러 개의 식별자가 하나의 객체를 공유할 수 있다는 것이다.

🧐 깊은 복사와 얕은 복사란?

✔️ 얕은 복사?객체를 프로퍼티의 값으로 갖는 객체의 경우 얕은 복사는 한 단계까지만 복사하는 것
✔️ 깊은 복사? 객체에 중첩되어 있는 객체까지 모두 복사하는 것.

🔖 참고로, 원본과 복사본은 참조 값이 다른 별개의 객체. 하지만 얕은 복사는 객체에 중첩되어 있는 객체의 경우 참조 값을 복사하고 깊은 복사는 완전한 복사본을 만든다는 차이가 있음.

🔖 원시 값을 할당한 변수를 다른 변수에 할당하는 것을 깊은 복사, 객체를 할당한 변수를 다른 변수에 할당하는 것을 얕은 복사라고 부르는 경우도 있음.

🧚‍참조에 의한 전달

🧐 참조에 의한 전달이란?

객체를 가리키는 변수를 다른 변수에 할당하면 원본의 참조 값이 복사되어 전달되는 것
이는 원본과 복사본이 하나의 객체를 공유한다는 것을 의미.

profile
꾸준히 성장하기🦋 https://hyodduru.tistory.com/ 로 블로그 옮겼습니다

0개의 댓글