프로그래밍 언어의 종류와 관계없이 메모리 생명 주기(memory life cycle)는 거의 항상 동일한 패턴을 따릅니다.
- 필요한 메모리를 할당한다
- 할당된 메모리를 사용한다(읽기, 쓰기)
- 더 이상 필요하지 않을 때 할당된 메모리를 해제한다
위 세 단계 중 두 번째 단계는 모든 언어에서 명시적(explicit)입니다. 즉, 할당된 메모리를 실제로 사용하는 작업은 개발자가 직접 수행해야 합니다.
반면 첫 번째와 마지막 단계는 C언어 같은 저수준(low-level) 언어에서는 명시적으로 처리해야 하지만, 자바스크립트처럼 고수준(high-level) 언어에서는 대부분 암묵적(implicit)으로 처리됩니다.
따라서 자바스크립트에는 메모리를 할당하거나 해제하는 명시적인 방법이 존재하지 않습니다. 객체를 초기화하는 순간 해당 객체를 위한 메모리가 자동으로 할당되며, 변수가 스코프(scope)를 벗어나면 가비지 컬렉터(garbage collector)가 이를 자동으로 감지하여 메모리를 회수합니다.
예제 코드
function test() {
// 메모리를 할당하고 사용
let x = {
name: "John",
age: 24
}
console.log(x);
return null;
// 함수가 스코프를 벗어나는 즉시 가비지 컬렉션이 실행되고,
// 해당 메모리는 자동으로 해제됩니다.
}
test();주석에 설명된 메모리 생명 주기는 test() 함수가 호출될 때마다 동일하게 반복해서 수행됩니다. 이처럼 자바스크립트 개발자는 메모리 관리를 엔진에 위임하되, 불필요한 참조를 남겨두지 않도록 코드를 작성하는 것이 중요합니다.