*이 필기는 웹 프로그래밍 튜토리얼에서 보고 작성합니다.
원시 값과 객체는 크게 세 가지 측면에서 다르다.
- 원시 값은 변경 불가능한 값, 객체는 변경 가능한 값
- 원시 값을 변수에 할당하면 변수에는 실제 값이 저장됨, 객체를 변수에 할당하면 변수에는 참조 값이 저장됨
- 원시 값을 갖는 변수를 다른 변수에 할당하면 원본의 원시 값이 복사되어 전달됨 - 값에 의한 전달, 객체를 가리키는 변수를 다른 변수에 할당하면 원본의 참조 값이 복사되어 전달됨 - 참조에 의한 전달
1. 원시 값
우선 변수는 하나의 값을 저장하기 위해 확보된 메모리 공간 또는 메모리 공간을 식별하기 위해 붙인 이름,
값은 변수에 저장된 데이터이다.
변경 불가능한 것은 값에 대한 말이다.
따라서 변수는 언제든지 재할당을 통해서 변수 값을 바꿀 수 있다.
반면에 변수의 상대개념인 상수는 이런 재할당이 금지되어 있다.
2. 객체
원시 값을 할당한 변수가 기억하는 메모리 주소를 통해 메모리 공간에 접근하면 원시 값에 접근할 수 있다.
하지만, 객체를 할당한 변수가 기억하는 메모리 주소를 통하면 참조 값에 접근할 수 있다.
참조 값은 생성된 객체가 저장된 메모리 공간의 주소이다.
객체는 변경 가능한 값이다. 따라서 그 변수는 재할당없이 객체를 직접 변경할 수 있다.
메모리 효율성을 위해서 객체를 변경 가능한 값으로 설계되었는데, 이에 따른 부작용이 있다. 그것은 원시 값과 다르게 여러 개의 식별자가 하나의 객체를 공유할 수 있다는 것이다.
앞에서 객체는 참조에 의한 전달이라고 했었다.
var person = {
name: 'Lee'
};
// 참조 값을 복사
var copy = person;
이 예제에서 원본 person과 사본 copy는 저장된 메모리 주소는 다르지만 동일한 참조 값을 갖는다.
따라서 동일한 객체를 가리킨다. 그래서 객체의 프로퍼티 값을 변경하거나 추가하거나 하면 서로 영향을 주고받는다.
사실, 자바스크립트에서 값에 의한 전달이나 참조에 의한 전달이나 결국은 똑같은 것이다.
둘다 식별자가 기억하는 메모리 공간에 있는 값을 복사해서 전달하는 것이 똑같다. 다만 그 값이 참조 값이냐 아니냐가 다를 뿐이다.
여기까지 입니다 - 틀린 점이 있다면 꼭 지적해주세요!