20. 가비지 컬렉션

Chipmunk_jeong·2021년 2월 26일
0

TIL

목록 보기
20/62
post-thumbnail

본 내용은 모던자바스크립트를 학습하며 정리하는 블로깅입니다.
>모던자바스크립트

우리는 코딩을 하면서 만든 수많은 변수들과 객체들을 만들게 된다.
만약에 우리가 앞서 만들었던 데이터들이 뒤에서 사용이 안된다면 이것은 더미데이터가 되고 성능적인면에서 부정적인 영향이 생길것이다.

그래서 자바스크립트에서는 눈에 보이지 않는 곳에서 메모리 관리를 한다.
그것을 가비지 컬렌션이라 한다.

기준

자바스크립트는 도달 가능성이라는 개념을 사용해 메모리 관리를 수행한다

도달 가능한 값이란 접근하거나 사용할 수 있는 값이다.
이러한 값들은 어떠한 이유가 없다면 삭제되지 않는다.

  • 함수내에서 사용되고 있는 지역변수 및 매개변수
  • 고차함수에서 사용되는 변수와 매개변수
  • 전역변수
  • 객체 안에서 참조하고있는 또다른 객체들

아래의 예시를 본다면 가비지 컬렉터가 어디에 사용되는지 알 수 있다.

let user = {
  name: 'jiun'
};

위의 코드에서는 user라는 변수가 객체를 참조하고있다.
하지만 여기서 user변수에 null을 할당하게 된다면 참조되던 객체는 더이상 사용하지 않게되는 데이터이고, 자바스크립트는 이런 데이터를 메모리에서 삭제할 것이다.

두개의 참조

let user = {
  name: 'quakka'
}

let guest = user;
user = null;

위와 같이 하나의 객체에 두개의 변수가 참조를 하고있을 경우에는
하나가 참조가 끊겨도 다른 하나에서 접근을 할 수 있기 때문에
이것은 도달가능한 값이고 메모리에서 삭제되지 않는다.

연결된 객체

function marry(man, woman) {
  woman.husband = man;
  man.wife = woman;

  return {
    father: man,
    mother: woman
  }
}

let family = marry({
  name: "John"
}, {
  name: "Ann"
});

marry라는 함수는 두 객체를 받아서 서로 프로퍼티로써 참조를 통해 '결혼'을 하며, 두객체를 모함하는 새로운 객체를 반환한다.

지금은 어느객체든 접근이 가능하여 전부 도달가능한 값이라고 할 수 있다.

여기서 참조되는 두가지를 지운다면

delete family.father;
delete family.mother.husband;

두개를 삭제함으로써 Jogn으로 들어오는 참조가 사라져 도달가능한 값의 상태를 벗어난다.

가비지컬렉터는 저러한 값들을 메모리에서 삭제한다.

이러한 가비지 컬렉터는 우리에게 메모리적인 부분에서 수고를 덜게된다.

profile
Web Developer

0개의 댓글