타임라인
- 강의 [JS문법 종합반] 3주차
- 자바스크립트 걷기반
- 특강 알고리즘
오늘의 학습내용 : 자바스크립트의 데이터 타입(심화)
자바스크립트의 변수 타입은 기본형(Primitive type)과 참조형(Reference Type)으로 나눌 수 있다.
기본형 | 참조형 |
string, number, boolean, undefined, symbol, null 등 | Object - array, function, date, regexp, map, set 등 |
값이 담긴 주소값을 바로 복제 |
주소값들로 이루어진 묶음을 가리키는 주소값을 복제 |
불변성을 띔 | 불변성을 띄지 않음 |
기본형 데이터 타입 이 불변성을 띈다는 것은 곧 메모리 영역에서 변경할 수 없음을 말한다. 때문에 변수에 할당될 때 메모리의 고정 크기로 값을 저장하고, 그 값을 변수가 주소로 가리키는 형태로 쓰인다. 재할당 시에도 새로운 메모리에 값을 저장하고, 변수가 가리키는 주소값이 달라지는 것이다.
반면 참조형 데이터 타입 은 데이터 자체를 별도로 마련된 메모리 공간에 저장하고, 변수에 할당될 때 데이터에 대한 주소를 저장하며, 변수가 가지고 있는 메모리 주소를 통해 그 값에 접근하는 방식을 사용한다. 데이터 영역에 저장된 값 자체는 변하지 않았지만, 별도로 마련된 메모리 영역은 원할 때 변경할 수 있기 때문이다.
원시값, 객체, 함수처럼 작성되는 모든 것들은 일정한 메모리 영역을 차지한다. 만약 필요에 의해 데이터 값을 변경하고, 더이상 사용하지 않는 데이터가 남았다면 어떻게 처리할까? 자바스크립트는 쓸모없어진 객체를 자동으로 메모리에서 제거한다. 가비지 컬렉션은 개발자가 직접 제어할 필요 없이 자바스크립트 엔진 자체에서 수행되고, 이때 도달 가능성(reachability) 개념을 사용하여 메모리를 관리한다. 도달 가능성은 어떤 방식으로든 접근하고 사용할 수 있는 값을 기준으로 한다. 가비지 컬렉터는 메모리에 있는 모든 객체를 모니터링하면서, 도달할 수 없는 객체로 판별되면 삭제하는 것이다. 접근 불가능한 값이지만 삭제되지 않는 값들도 있다.
- 현재 함수의 지역 변수와 매개변수
- 중첩 함수의 체인에 있는 함수에서 사용되는 변수와 매개변수
- 전역 변수 등
전역 변수에 저장된 객체의 프로퍼티가 또 다른 객체를 참조하고 있다면, 프로퍼티가 참조하는 객체는 도달 가능한 값이 된다. 따라서 이 객체가 참조하는 다른 모든 값들도 도달 가능한 것으로 여겨진다.
◆ 불변 객체
자바스크립트 원시값의 메소드는 복사본을 그대로 가져오고, 객체(배열)의 메소드는 기존 배열 자체를 변경한다. 때문에 이런 문제가 발생할 수 있다.
// user 객체를 생성
var user = {
name: 'Bob',
gender: 'male',
};
var changeName = function (user, newName) {
var newUser = user;
newUser.name = newName;
return newUser;
};
// 변경한 정보를 user2 변수에 할당하더라도, 가변한 데이터이기 때문에 user1도 영향을 받는다.
var user2 = changeName(user, 'James');
console.log(user.name, user2.name); // James James
console.log(user === user2); // true
'스파르타코딩클럽 > 내일배움캠프' 카테고리의 다른 글
[JS문법 종합반] 4주차_콜백 함수와 제어권 (1) | 2024.10.22 |
---|---|
[JS문법 종합반] DOM 조작 (2) | 2024.10.16 |
[JS문법 종합반] 2주차_ES6문법 : 일급 객체로서의 함수 (2) | 2024.10.11 |
[JS문법 종합반] 2주차_ES6문법 : ES6문법 소개 (1) | 2024.10.10 |
[JS문법 종합반] 1주차_자바스크립트의 기본 문법 : 변수와 자료형 (1) | 2024.10.08 |