이전 글의 내용인 Stack & Heap 을 이해했다면 이 내용도 이해하기 쉽다.
어떠한 처리 후 원본이 변경되지 않는다 -> 비파괴적 처리
어떠한 처리 후 원본이 변경된다 -> 파괴적 처리
코드로 예를 들어본다.
보이는 a + b 에서 + 연산은 비파괴적 처리라고 볼 수 있다.
원본이 변경되었기 때문에, push()메서드는 파괴적 처리를 한다고 볼 수 있다.
const는 상수를 선언할때 쓴다.
상수를 선언하고 변경은 안되는걸로 알고 있지만, 이게 변경이 되는 경우가 있다.
이와 같이 const a = 10을 선언하고 a = 20을 할당해주려고 하면, 에러가 발생한다.
하지만 배열은 변경이 된다.
왜 그런지 알아보자.
const로 선언된 값은 Stack내부에서 값을 변경을 할 수 없다.
그래서 a = 20 으로 바꿔주려했을때 에러가 나온것이다.
하지만 b라는 상수는 아예 상황이 다르다.
b는 const로 선언을 하긴 했지만, b 내부에 있는 값이 Heap에 선언된 배열의 주소이다.
b를 아예 다른 배열로 변경하려는 b = [1, 2, 3, 4] 와 같은 시도는 오류를 발생하지만, 주소에 있는 즉 Heap에 있는 배열의 요소를 추가하고 삭제하고 하는것 등은 const로 선언 되었어도 아무런 문제가 없다.