인프런 커뮤니티 질문&답변
Object.freeze()와 Spread Operator의 depth가 1인 이유
작성
·
313
0
JS학습 과정에서 하나의 궁금증이 발생했습니다. 자료를 찾아보며 자체적 결론을 내렸으나, 이에 대한 추론이 맞는지 확인할 길이 없어 답답함에 문의드립니다.
궁금증한 것 요약
Spread Operator과 Object.freeze()는 해당 식별자의 데이터 영역에만 적용되는가?입니다. Spread Operator과 Object.freeze()는 각각 적용되는 depth가 공통적으로 1입니다. 무언가 공통점이 있는 것 같다는 생각에 메모리적 관점으로 문제를 접근하게 되었습니다.
Spread Operator와 Object.freeze()는 전부 "참조 타입의 데이터"에 사용됩니다.
이것들은 참조 데이터가 할당된 식별자의 데이터 해당 데이터 영역에만 적용될 뿐이지, 해당 데이터 영역의 변수영역에 무엇이 들어있는지는 신경을 쓰지 않는다고 추론했습니다. 적용되는 depth가 1이기 때문입니다. 즉, 위 함수들이 적용되는 부분은 해당 참조 타입 데이터 식별자의 "데이터 영역 뿐"이라고 생각했습니다.
혹시 답을 알고계시다면, 답변해주시면 감사하겠습니다!!!
아래는 조금 더 보시기 쉽게 풀어 쓴 글입니다.질문 내용을 이해하셨다면 아래의 내용은 보실 필요가 없습니다. :)
1. 궁금증이 발생한 계기
궁금증이 발생한 계기는 다음과 같았습니다.
ES6의 Spread Operator는 DeepCopy되는 depth가 1이다.
Object.freeze()로 불변성이 확정되는 depth는 1이다.
둘 다 참조 데이터 타입이고 둘 다 depth가 1이네?? 왜그럴까??
2. 추론
# Object.freeze()의 예.
1. const는 "변수 영역"에 담긴 값을 고정시킨다.
2. Object.freeze()는 "데이터 영역"에 담긴 값을 고정시킨다.
freeze()를 걸어준 해당 depth만 적용되고 하위 depth는 적용이 안되는 것을 확인!
(추론) Object.freeze() 메서드가 해당 참조 타입 데이터에 대한 데이터 영역만 고정하는 방식이라면 납득이 가능하다!
그렇다면, 데이터 영역에 들어있는 변수영역(key, value)들의 데이터 영역이 또 다른 참조 타입 데이터(nestedObject나 고차원 배열)인 경우, 이에 대한 불변성을 확정하지 못하는 방식으로 동작하는 것이겠구나!
Spread 연산자도 똑같은 참조 타입 데이터이니, 위의 이유와 같겠군!이라고 추론했습니다.
답이 아니더라도 위의 추론에 대한 의견을 듣고싶습니다 :)
답변




