[TIL]21.05.11
Today I Learned
**const, 불변성**
원시 데이터 타입은 Boolean, Number, String, Null, undefined, Symbol가 있는 데, 만약 원시타입으로 값을 변수에 할당하게 된다면 메모리상의 과정은 대략적으로 이러하다.
let a = 'name';
// 'name'의 데이터주소를 a라는 변수에 할당해줌
console.log(a);
// => a는 'name'이란 원시타입의 메모리 주소를 가지고, 그 주소를 참조해 값을
// console에 출력함
만약 이렇듯 원시 타입 데이터를 참조하는 변수가 값을 변경하고 싶다면 '새로운 데이터 주소'를 참조한 데이터를 할당받아야한다.
이러한 특성을 살려 'const'란 키워드를 다음과 같이 사용할 수 있다.
const a = 'name';
a = 'newName'; // Error!
const로 선언된 변수, 함수, 객체, 배열등등은 새로운 데이터 주소를 할당할 수 없다, 대신 같은 메모리주소에서 값을 변경하는 것은 가능하다.
원시 타입 데이터는 항상 값을 변경할때, 새로운 데이터주소를 가지므로 값만 변경을 하기 위해선 C,C++에 있는 포인터 문법을 사용하는 수 밖에 없을 것이다.(JS에 있는지 잘 모르겠지만..)
반면에 참조 타입 데이터인 배열, 객체, 함수는 Heap이란 데이터 영역에 저장되면서 새로운 데이터 주소를 받지않고도 새로운 값, 데이터주소를 Heap에서 동적으로 할당할 수 있다. 하여 참조 타입 데이터가 const를 활용하는 방법은 다음과 같다.
const obj = {
name: 'Chaerin',
city: 'seoul'
}
// ERROR!
obj = { // ERROR!
name: 'Juhong', // 다른 데이터 주소를 가진 객체를 할당했기
// 때문
city: 'jeju'
}
// Dot natation을 사용해서 기존 데이터주소에서 값만 변경하는 코드
// (Braket notation도 물론 사용가능, 사용시 '' 문자열표기법 주의)
obj.name = 'Juhong';
obj['city'] = 'jeju';
참고
https://sustainable-dev.tistory.com/156
회고
요즘 개인 프로젝트로 리액트랑 노드 사용해서 영화 추천 사이트를 만들면서 공부 중인데,
TypeError: Cannot read property 'prototype' of undefined
가 떠서 정말 하루종일 삽질중이다. 처음으로 StackOverFlow에도 질문을 해봤다.
안된다고 불평하지 말고, 삽질도 체계적으로 하려고 노력하는 하루였다.
내일은 꼭 무엇이 문제인지 알고 에러를 잡았으면 좋겠다.
Author And Source
이 문제에 관하여([TIL]21.05.11), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@juho00ng/TIL21.05.11저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)