자료의 비파괴와 파괴 && 상수인데 변경이 왜 가능한가?

hyo·2021년 10월 19일
2

[Javascript] 기초 학습

목록 보기
10/62

이전 글의 내용인 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로 선언 되었어도 아무런 문제가 없다.


내용 정리

처리 후에 원본이 변경되었다 -> 파괴적 처리

처리 후에 원본이 변경되지 않음 -> 비파괴적 처리

const -> Stack에 있는 값 변경할 때 오류! -> Heap에 있는 레퍼런스된 복합 자료형을 조작하는 것에는 문제 없음!

profile
개발 재밌다

0개의 댓글