재할당이란 이미 값이 할당되어 있는 함수에 새로운 값을 또다시 할당하는 것을 말한다
var score = 80; score = 90;
var(let) 키워드로 선안한 변수의 값을 재할당할 수 있다
재할당은 현재 변수에 저장된 값을 버리고 새로운 값을 저장하는 것이다
var(let) 키워드로 선언한 변수는 선언과 동시에 undefined로 초기화되기 때문에 엄밀히 말하자면 변수에 처음으로 값을 할당하는 것도 재할당이다
ex
var a = 10 -> var a -> undefined -> 10
재할당은 변수에 저장된 값을 다른 값으로 변경한다
만약 값을 재할당할 수 없어서 변수에 저장된 값을 변경할 수 없다면 변수가 아니라 상수(constant) 라 한다
상수는 한번 정해지면 변하지 않는 값이다, 상수는 한번만 할당 할 수 있다
const 키워드
ES6에 도입된 const 키워드를 사용해 사언한 변수는 재할당이 금지된다
const 키워드는 한번만 할달할 수 있는 변수를 선언한다, const 키워드를 사용하면 상수를 표현할 수 있다const로 선언만 했을 때
const c console.log(c)
const로 선언 할당 후 재할당 했을 때
const foo = 10; foo = 100;
재할당은 새롭게 저장하는 것이 아니라 새로운 메모리 공간을 확보하고 그 메모리 공간에 저장한다
가비지 콜렉터 (garbage collector)
가비지 콜렉터는 애플리케이션 할당(allocate)한 메모리 공간을 주기적으로 검사하여
더 이상 사용되지 않는 메모리를 해제(release)하는 기능을 말한다
더 이상 사용되지 않는 메모리란 어떤 식별자도 참조하지 않는 메모리 공간을 의미한다
자바스크립트는 가비지 콜렉터를 내장하고 있는 매니지 언어로서 가비지 콜렉터를 통해 메모리 누수(memory leak)를 방지한다
언매니지 언어(unmanaged language), 매니지드 언어 (managed language)
언매니지드 언어 (ex, C 언어)는 개발자가 명시적으로 메모리를 할당하고 해제하기 위해 (malloc(), free()) 같은 저수준(low-level) 메모리 제어 기능을 제공한다
언매니지 언어는 메모리 제어를 개발자가 주도할 수 있으므로 개발자의 역량에 따라 최적의 성능을 확보할 수 있지만 그 반대의 경우 치명적인 오류를 생산할 가능성도 있다매니지드 언어 (ex, 자바스크립트)는 메모리의 할당 및 해제를 위한 메모리 관리 기능을 언어 자원에서 담당하고 개발자의 직접적인 메모리 제어를 허용하지 않는다
개발자가 명시적으로 메모리를 할당하고 해제할 수 없다
더 이상 사용하지 않는 메모리의 해제는 가비지 콜렉터가 수행하고, 개발자가 관여할 수 없다
매니지드 언어는 개발자의 역랑에 의존하는 부분이 상대적으로 작아져 일정한 생산성을 확보할 수 있는 장점이 있지만 성능 면에서 어느정도 손실은 감수 된다