Javascript - 스택과 힙, 파괴적 처리와 비파괴적 처리

Javascript

자바스크립트 공부하다가 알아둬야할 것 같아서 따로 포스팅

정확하진 않지만 대충 이런 느낌이라고 생각하면 될듯

 

 

🧀 스택(Stack)과 힙(Heap) 간단 이해

기본 자료형 숫자, 문자열, 블 스택(Stack)
복합 자료형 배열, 함수, 객체 힙(Heap)

기본 자료형은 스택(Stack)이라는 곳에 저장
복합 자료형은 힙(Heap)에 저장

그러니까 ...
배열은 힙에다가 저장이 됨.

그러면 고유의 위치가 있을테고
그걸 스택에서 해당 위치에 이름을 붙혀서 변수명이 생기는 느낌
그래서 c=[1,2,3] 이 가능해지는 것

여기서 위치는 "주소"고
스택의 주소를 힙의 주소를 가리키는 걸 "레퍼런스"한다고 하고
스택의 변수명은 "레퍼런스 변수" 라고 함

 

스택(Stack) 기본 자료형과 주소 등을 저장하는 메모리 공간 (착착 쌓는)
힙(Heap) 복합 자료형을 저장하는 메모리 공간 (아무렇게나 쌓아둔)
주소 저장된 자료의 위치
레퍼런스한다 스택의 주소가 힙의 주소를 가리키는 것
레퍼런스 변수 스택에 저장된 것중에 주소가 저장된 변수

 



🧀 파괴적 처리와 비파괴적 처리

파괴적 처리 어떠한 처리 후 원본이 변경된다
비파괴적 처리 어떠한 처리 후 원본이 변경되지 않는다


let a = 10
let b = 20
a + b → 30
a → 여전히 10
즉, 비파괴적 처리 (원본이 변경 ㄴㄴ)

const c = [1,2,3]
c.push(4)
c → [1,2,3,4]
즉, 파괴적 처리 (원본이 변경ㅇㅇ)

아니 근데 const가 수정이 되네??? ← 이건 밑에 설명

스택의 자료는 크기가 작기 때문에 .. 비파괴적 처리를 해도 컴퓨터에 영향이 없음
다만 배열을 수정할 경우 .. 수정된걸 다른 곳에 저장해서 비파괴적으로 하게되면 컴퓨터에 부담이 되서 (옛날)
복사가 아니라 원본을 직접적으로 수정을해서 파괴적 처리가 된 것.


근데 이게 .. 연산 도중 문제가 생기면 어디서부터 잘못된건지 모르기때문에
요새는 복제본을 사용하는 비파괴적 처리를 더 많이함!
그래서 2010년 이후 자바스크립트에 비파괴적 메서드가 생김!!


🧀 그리하여 const에 선언한 배열이 수정이 되는 이유

애초에 const 는 스택에 있는걸 변경하지 못하게 함.
근데 배열 메서드같은건 힙에서 수정이 되는거고
스택에서 해당 변수명에 저장된 해당 주소가 변경되는게 아니라서 가능한 것!!