객체
객체는 프로퍼티의 개수가 정해져 있지 않으며, 동적으로 추가되고 삭제할 수 있습니다.
또한 프로퍼티의 값에도 제약이 없습니다. 따라서 객체는 원시 값과 같이 확보해야 할 메모리 공간의 크기를 사전에 정해둘 수 없습니다.
변경 가능한 값
객체(참조) 타입의 값, 즉 객체는 변경 가능한 값입니다.
원시 값을 할당한 변수가 기억하는 메모리 주소를 통해 메모리 공간에 접근하면 원시 값에 접근할 수 있습니다.
원시 값을 할당한 변수는 원시 값 자체를 값으로 갖습니다.
하지만 객체를 할당한 변수가 기억하는 메모리 주소를 통해 메모리 공간에 접근하면 참조 값에 접근할 수 있습니다.
참조 값은 생성된 객체가 저장된 메모리 공간의 주소입니다.
// 할당이 이뤄지는 시점에 객체 리터럴이 해석되고, 그 결과 객체가 생성됩니다.
var person = {
name: 'Nerd'
};
// person 변수에 저장되어 있는 참조 값으로 실제 객체에 접근합니다.
console.log(person); // { name: "Nerd" }
일반적으로 원시 값을 할당한 변수의 경우 변수의 ''값을 갖는다 또는 변수의 값은 ''다라고 표현하지만
객체를 할당한 변수의 경우 변수는 객체를 참조하고 있다 또는 변수는 객체를 가리키고 있다고 표현합니다.
위 예제에서 person 변수는 객체 { name: 'Nerd' }를 가리키고(참조하고)있습니다.
원시 값은 변경이 불가능한 값이므로 원시 값을 갖는 변수의 값을 변경하라면 재할당 외에는 방법이 없습니다.
하지만 객체는 변경이 가능한 값입니다. 따라서 객체를 할당한 변수는 재할당 없이 객체를 직접 변경할 수 있습니다.
var person = {
name: 'Nerd'
};
//프로퍼티 값 갱신
person.name = 'Woo';
//프로퍼티 동적 생성
person.address = 'Seoul';
console.log(person) // { name: "Woo", address: "Seoul" }
원시 값은 변경 불가능한 값이므로 원시 값을 갖는 변수의 값을 변경하려면 재할당을 통해 메모리에 원시값을 새롭게 생성해야 하지만
객체는 변경 가능한 값이므로 메모리에 저장된 객체를 직접 수정할 수 있습니다.
이때 객체를 할당한 변수에 재할당을 하지 않았으므로 객체를 할당한 변수의 참조값은 변경되지 않습니다.
객체를 생성하고 관리하는 방식은 매우 복잡하며 비용이 많이 드는 일입니다.
객체를 변경할 때마다 원시 값처럼 이전 값을 복사해서 새롭게 생성한다면 명확하고 신뢰성이 확보되겠지만
객체는 크기가 정해지지 않고, 원시 값처럼 크기가 일정하지도 않습니다. 또한 프로퍼티 값이 객체일 수 있어 복사해서 생성하는
비용이 많이 듭니다. 다시 말해, 메모리의 효율적 소비가 어렵고 성능이 나빠집니다.
따라서 메모리를 효율적으로 사용하기 위해, 그리고 객체를 복사해 생성하는 비용을 절약하여 성능을 향상하기 위해
객체는 변경 가능한 값으로 설계되어 있습니다.
참조에 의한 전달
var person = {
name: 'Nerd'
};
// 참조 값을 얕은 복사
var copy = person;
객체를 가리키는 변수(원본, person)를 다른 변수(사본, copy)에 할당하면 원본의 참조값이 복사되어 전달됩니다.
이를 참조에 의한 전달이라 합니다.
위의 예제는 person을 copy에 할당하면 원본 person의 참조값을 복사해서 copy에 저장합니다.
이때 원본 person과 사본 copy는 저장된 메모리 주소는 다르지만 동일한 참조값을 갖습니다.
person과 copy는 모두 동일한 객체를 가리킵니다.
이것은 두 개의 식별자가 하나의 객체를 공유한다는 것을 의미합니다.
따라서 원본 또는 사본 중 어느 한쪽에서 객체를 변경하면 서로 영향을 주고받습니다.
오늘은 오전에 자바스크립트 기초적인 부분에 대한 강의를 들었습니다!
확실히 제가 기초가 부족하단 것을 느꼈고 정말 열심히 공부해야겠다는 생각이 들었습니다!
자바스크립트 기초강의를 들으며 하루 일과를 마치고 모던 자바스크립트 책에 한 키워드를 정리하면
확실히 시너지가 나오는 것 같습니다!
자바스크립트에 대한 이해도가 높아져서 리액트를 사용할 때
자바스크립트를 잘 모르고 사용했을 때와 어떤 점이 다르게 느껴질지 기대됩니다!
코딩 공부를 하시는 많은 분들 모두들 파이팅입니다!!
✍️✍️👍👍
'자바스크립트' 카테고리의 다른 글
TIL] 함수(2) (0) | 2021.07.29 |
---|---|
TIL] 함수 (0) | 2021.07.28 |
TIL] 원시 값 (0) | 2021.07.26 |
TIL] 프로퍼티 (3) (0) | 2021.07.25 |
TIL ] 프로퍼티 (2) (0) | 2021.07.23 |