11장. 원시 값과 객체의 비교
데이터 타입은 크게 원시타입과 객체타입으로 구분할 수 있다.
* 변수 : 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 / 메모리 공간을 식별하기 위해 붙이 이름
* 값 : 변수에 저장된 데이터로서 표현식이 평가되어 생성된 결과
원시값 (Primitive Value)
- 변경 불가능한(immutable) 값.
- 변수에 직접 값을 저장하며, 메모리 주소가 아닌, 값 자체로 비교한다
- 다른 변수에 할당시 원시값이 복사되어 전달 → 값에 의한 전달
(1) 불변성
한 번 생성된 데이터(값)가 변경될 수 없다.
기존 데이터를 직접 수정하지 않고, 변경이 필요하면 새로운 값을 생성하여 사용하는 방식
- 재할당을 하면 새로운 메모리 공간을 확보하고, 변수는 그 새로운 주소를 가리키게 된다.
- 원시값을 갖는 변수의 값을 변경하려면 재할당 외에는 방법이 없다.
원시값 재할당 과정
- 변수를 선언하면, 메모리 공간을 확보하고 값을 저장함.
- 원시값은 불변이므로, 기존 값을 직접 수정할 수 없음.
- 변수를 새로운 값으로 재할당하면, 새로운 메모리 공간을 확보하고 새로운 값을 저장.
- 변수는 기존 메모리를 참조하던 주소에서 새로운 메모리 주소로 변경됨.
- 기존 메모리는 **GC(Garbage Collector)**에 의해 정리될 수 있음(더 이상 참조되지 않는다면).
let num1 = 10;
let num2 = num1; // num1의 값이 num2에 복사
num1 = 20; // num1을 새 값으로 재할당
console.log(num1); // 20
console.log(num2); // 10 (num2는 여전히 10)
💡 문자열의 불변성
문자열은 유사 객체 배열이면서 이터러블이므로 배열과 유사하게 접근할 수 있다.
1.문자열은 불변하여, 한 번 생성된 문자열을 수정할 수 없다.
2. 문자열을 변경하려면 새로운 문자열을 생성하고 변수에 다시 할당해야 한다.
3. 문자열 메서드는 원본을 변경하지 않고 항상 새로운 문자열을 반환한다.
4.불변성 덕분에 데이터의 안정성이 높아지고, 메모리 최적화 및 성능 향상에 도움이 된다 !
(2) 값에 의한 전달
변수에 저장된 값을 복사하여 전달하는 방식
원래 변수와 독립적인 새로운 값을 생성하여 전달하기 때문에, 원본 값이 변경되지 않는다.
객체 (Object)
- 변경 가능한(mutable) 값.
- 변수에는 실제 데이터가 아닌 참조 주소(reference) 저장.
- 같은 데이터라도 서로 다른 메모리 주소를 가질 수 있음.
- 메모리 주소를 비교하므로, 내용이 같아도 서로 다를 수 있음.
(1) 가변성
객체를 생성한 후에 재할당 없이 프로퍼티를 동적으로 추가, 변경, 삭제할 수 있다.
참조값은 객체가 저장된 메모리 공간의 주소를 가리키며,변수에는 객체의 값이 아니라 참조값(메모리 주소)이 저장 된다.
객체는 가변적이기 때문에, 여러개의 식별자가 하나의 객체를 공유할 수가 있다.👎
- 얕은 복사(Shallow Copy)" 또는 "깊은 복사(Deep Copy)"를 사용하면 원본을 보호할 수 있다.
- 얕은 복사 : 한단계 까지만 복사하는 것
- 깊은 복사 : 객체에 중첩되어 있는 개체까지 모두 복사하는 것
(2) 참조에 의한 전달
객체를 가리키는 변수(원본)을 다른변수에 할당하면, 원본에 저장된 값이 아닌 참조 값이 복사되어 전달된다.
함수 내부에서 객체를 변경하면 원본 객체도 영향을 받는다는 점에서 원시값과 차이가 있다.
let person1 = { name: 'Lim', age: 28 };
let person2 = person1; // person1의 참조 값이 person2에 전달
person1.age = 20; // person1의 객체를 수정
console.log(person1); // { name: 'Lim', age: 20 }
console.log(person2); // { name: 'Lim', age: 20 } (person2도 동일한 객체를 참조)
값에 의한 전달과 참조에 의한 전달은 메모리 공간에 저장되어 있는 값을 복사해서 전달한다는 면에서 동일하다.
여기서 중요한 것은 변수에 저장되 어 있는 값이 원시 값이냐 참조 값이냐의 차이다.
'BOOK > 모던 자바스크립트' 카테고리의 다른 글
모던 딥 자바스크립트 6 -10장 (0) | 2025.02.18 |
---|---|
모던 딥 자바스크립트 1 - 5장 (1) | 2025.02.11 |