[TIL - 메모리, 데이터 할당]

..·2023년 4월 5일
0

TIL

목록 보기
3/22
post-thumbnail

오늘은 3주차 강의를 듣고 있다.

처음보는 내용들을 잔뜩 배웠다.
데이터타입, 메모리, 데이터 할당-기본형, 데이터 할당-참조형
그런데 질문도 많이 생기고 이해하는데 시간이 좀 걸리는 부분이 많아서
진도가 느리게 나가고 있다.
내일 시험이 하나 있는데
이 이후에는 정해진 일정이 없어서
시험보고 나서 계속 이어서 들어야할 듯 싶다.

아래는 오늘 궁금했던 것들을 정리한 것


Q. let으로 변수를 선언하고 값을 할당하면 데이터 영역에 값이 저장되고 그 주소를 변수 영역으로 끌어 온다고 이해했는데 만약 let으로 재할당을 했을 때 기본형 데이터타입은 불변성이 있기 때문에 데이터 영역에서 다른 주소에 새로운 값이 저장되고 그 새로운 주소를 다시 변수 영역으로 끌고 오는 건데 그럼 처음 할당했던 변수 값은 데이터영역에 계속 남아있는건지 아니면 사라지는지?

A. 이전에 할당된 값은 더 이상 변수에 의해 참조되지 않으므로, JavaScript 엔진의 가비지 컬렉터(garbage collector)에 의해 해제될 수 있다.

따라서, 처음 할당된 변수 값은 해당 값이 저장된 메모리 주소를 통해 데이터 영역에 계속 남아 있을 수 있지만, 변수가 해당 값을 참조하지 않는다면 언젠가 가비지 컬렉터에 의해 해제될 수 있다.


Q. 가비지 컬렉터가 메모리를 해제하는 시점은 언제?

A. 가비지 컬렉터가 메모리를 해제하는 시점은 정확히 예측할 수 없다.

가비지 컬렉션은 일반적으로 자바스크립트 엔진이 빈번하게 사용되는 동안 무거운 작업으로 간주되므로, 이를 방지하기 위해 가비지 컬렉션은 일정 간격으로 또는 더 이상 메모리 공간이 확보되지 않을 때 실행된다.

가비지 컬렉션의 빈번한 실행은 성능 저하의 원인이 될 수 있으므로, 자바스크립트 엔진은 이를 최소화하기 위해 다양한 최적화 기법을 사용한다.

예를 들어, 대부분의 최신 브라우저에서는 가비지 컬렉션을 적극적으로 실행하는 것이 아니라, 메모리를 적극적으로 재활용하는 방식으로 성능을 최적화한다.

가비지 컬렉션은 자바스크립트 엔진의 내부 동작에 따라 다르며, 실행되는 시기는 예측하기 어렵다.

하지만 이는 자바스크립트 엔진이 가비지 컬렉션을 효율적으로 처리하기 위해 최적화되어 있기 때문에, 대부분의 경우에는 이러한 내부 동작에 대해 신경쓰지 않아도 된다.


Q. 프로퍼티 영역에는 key-value 쌍으로 저장이 되는데 key가 없는 set 객체 같은경우는 어떻게 저장되는지? 프로퍼티 영역이 없는건지?

A. Set객체는 Map 객체와 달리 key-value 쌍으로 저장되지 않습니다.Set객체 내부의 값들은 그 자체로 저장되며, 각 값이 내부적으로 유일한 식별자를 가지고 있습니다.
따라서 Set 객체는 프로퍼티 영역이 없습니다.


Q. 모든 객체가 프로퍼티 영역이 있는 건 아닌거네?

A. 네, 맞습니다. 모든 객체가 프로퍼티 영역을 갖는 것은 아닙니다.
자바스크립트에서는 객체가 갖는 프로퍼티의 종류에 따라 다음과 같이 구분할 수 있습니다.

  1. 데이터 프로퍼티(Data Property): 키와 값을 갖는 일반적인 프로퍼티
  2. 접근자 프로퍼티(Accessor Property): 키와 getter/setter 함수를 갖는 프로퍼티
  3. 내부 슬롯(Internal Slot): 객체의 내부 상태를 나타내는 숨겨진 프로퍼티로, 프로퍼티로 직접 접근할 수 없습니다.

따라서 데이터 프로퍼티와 접근자 프로퍼티를 갖는 객체는 프로퍼티 영역을 갖습니다. 반면, 내부 슬롯만을 갖는 객체는 별도의 프로퍼티 영역을 갖지 않습니다.


강의 하나 들을 때마다 궁금증이 생겨서 혼자서 찾아보고 이해마치고 다시 강의로 돌아오면 갑자기 바로 궁금증을 해결해주는 내용을 알려줘서 진짜 여러번 어이가 없었다ㅋㅋㅋㅋㅋㅋ
그래도 찾아보니까 좀 더 머리에 잘 들어오는 것 같다.
시간 단축을 위한 방법만 좀 찾으면 좋겠는데..!

0개의 댓글