스택과 힙: 자바스크립트의 메모리
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
자바스크립트 개발자 (중급/초보자), 메모리 관리 개념 이해 필요자
핵심 요약
- 스택 메모리는 원시 값(string, number, boolean)을 저장하며, 변수 복사가 발생하여 변경이 서로 영향을 주지 않음
- 힙 메모리는 객체(배열, 객체)를 저장하며, 참조(주소) 복사가 발생하여 변경이 서로 영향을 줌
- 깊은 복사(deep copy)는
JSON.stringify()
+JSON.parse()
로 구현 가능하며, 중첩 객체까지 복제
섹션별 세부 요약
1. 메모리 할당 기본 개념
- 스택 메모리: 고정 크기, 원시 값 저장, 빠른 접근
- 힙 메모리: 가변 크기, 객체 저장, 느린 접근
- 예시:
let fname = "John"
은 스택에 저장,let person = { fname: "John" }
은 힙에 저장
2. 스택 메모리 예시
newfname = fname
으로 복사 시,fname
과newfname
은 서로 독립적인 스택 메모리 영역을 사용newfname = "Jane"
변경 시fname
은 영향을 받지 않음
3. 힙 메모리 예시
let newPerson = person
은 참조 복사로,newPerson.fname = "Jane"
변경 시person.fname
도 변경됨- 깊은 복사(deep copy)가 필요한 경우
4. 얕은 복사(Shallow Copy)
{ ...person1 }
은 최상위 객체만 복사, 중첩 객체는 참조 공유person2.details.city = "Chicago"
변경 시person1.details.city
도 변경됨
5. 깊은 복사(Deep Copy)
JSON.stringify()
+JSON.parse()
로 중첩 객체까지 복제let person2 = JSON.parse(JSON.stringify(person1))
로 독립적인 객체 생성
6. 직렬화/역직렬화
- 직렬화(serialization): 객체를 JSON 문자열로 변환 (
JSON.stringify()
) - 역직렬화(deserialization): JSON 문자열을 객체로 복원 (
JSON.parse()
) - API 통신, 로컬 스토리지 등에 활용
결론
- 스택/힙 메모리 구분은 복제 로직 설계에 핵심
- 깊은 복사는
JSON.stringify()
+JSON.parse()
로 구현, 중첩 객체 포함 - 직렬화/역직렬화는 데이터 전송 및 저장 시 필수 기술