const로 선언한 배열, 객체에서 요소나 속성을 추가할 수 있는 이유(참조 타입)

변시윤·2023년 4월 3일
0

const로 선언한 배열이나 객체는 재할당이 불가능하지만, 해당 배열이나 객체 자체가 변경될 수는 있다. 객체와 배열이 참조 타입이기 때문이다. 그러나 다른 값을 할당하는 것은 불가능하다.

예를 들어서, 배열 메소드를 사용하면 const로 선언한 배열의 요소를 변경할 수 있다. 또한 const로 선언한 객체에 새로운 속성을 추가할 수 있다.

  • 배열

    const arr = [1, 2, 3];
    
     arr.push(4); ⭕️
     arr = [4, 5, 6]; ❌
  • 객체

    const obj = { name: "Alice", age: 30 };
    
     obj.address = "Seoul"; ⭕️
     obj = { name: "Bob", age: 25 }; ❌

참조 타입 vs 원시 타입

자바스크립트에서 변수는 원시 타입과 참조 타입으로 나뉜다.

  • 참조 타입(Reference Type)
    객체, 배열, 함수 등이 해당된다. 변수에는 해당 변수가 위치한 메모리 주소가 저장된다. 즉, 변수가 저장되는 곳은 스택 메모리가 아닌 힙 메모리 영역이다. 참조 타입은 변수에 할당될 때 값이 복사되지 않고 참조(Reference)가 복사된다. 이러한 이유로 참조 타입 객체가 너무 많아지면 메모리 누수와 같은 문제가 발생할 수 있다.
  • 원시 타입(Primitive Type)
    변경 불가능한 값으로 다른 값과 구분되어 독립적으로 존재한다. 숫자, 문자열, bollean, null, undefined, symbol 등이 해당된다. 원시 타입의 값을 다른 변수에 할당하면 해당 변수는 원시 타입의 값을 그대로 복사한다.

스택 vs 힙

자료를 저장하는 방식으로 데이터 관리시 중요한 역할을 수행한다.

  • 스택(Stack)
    후입선출(Last in First Out, LIFO)의 구조. 즉, 마지막에 저장한 데이터를 가장 먼저 꺼내는 구조다. 작은 메모리 블록을 사용하며 변수, 매개변수, 리턴 값 등을 저장한다. 함수가 호출되면 스택 프레임이 생성되어 스택에 저장되고, 함수가 종료되면 해당 스택 프레임이 제거된다. 정적 할당(Static Allocation) 방식으로 데이터를 저장하므로 빠른 속도로 처리한다.
  • 힙(Heap)
    동적으로 생성되는 데이터를 저장하는 공간. 메모리의 높은 주소부터 낮은 주소 방향으로 할당되며 크기가 동적으로 변할 수 있다. 객체, 배열, 함수 등이 저장된다. 동적 할당(Dynamic Allocation) 방식으로 데이터를 저장하기 때문에 유연한 메모리 관리가 가능하지만, 스택에 비해 처리 속도가 느리다. 그러므로 빈번한 접근보다는 큰 데이터를 한 번에 읽어들이는 방식으로 사용한다.

📌 배열 메소드

profile
개그우먼(개발을 그은성으로 하는 우먼)

0개의 댓글