TIL 2021-05-04 (클로저, 가비지 컬렉터, 순환 참조)

nyongho·2021년 5월 4일
0

오늘 배운 내용

목록 보기
6/40

TIL


What I Learn?

1) 클로저 (Closure) 란?

이전 블로깅 글 에서도 언급했었지만 클로저란 쉽게 말해서

외부함수 내부에 존재하는 내부함수를 의미한다.


function makeCounter () {
  let num = 0;
  
  return function () {
    return num ++;
  }
}

let counter = makeCounter();

counter(); // 0
counter(); // 1
counter(); // 2

위 코드는 내부함수에서 외부함수의 변수에 접근하는 모습이다.

함수 makeCounter 는 변수 counter 에 할당되며 실행이 종료되었지만, counter 를 실행하면 makeCounter 내부에 선언된 변수 num 을 사용할 수 있다.

이러한 형태 (상위 스코프의 변수에 접근 가능한 것)를 클로저라고 표현한다.

위에서 알 수 있는 클로저를 사용하는 이유

  1. 현재 상태를 기억하고 변경 된 최신 상태를 유지 하기 위함

  2. 전역 변수의 사용을 억제 하기 위함

  3. 데이터 은닉을 위함


2) 가비지 컬렉터 (Garbage Collector) 란?

메모리 할당을 추적하고 할당된 메모리 영역이 필요하지 않은 영역일 경우 판단해서 회수하는 기능.

자바스크립트에서 변수는 직접적으로 참조 값을 담고 있지 않고 해당 값을 메모리 상에 저장 된다.

그래서 참조 값을 생성하고나서 더 이상 참조할 것이 없거나 비어졌을 때 가비지 컬렉터가 동작해서 메모리가 반환된다.

2-1. 자바스크립트의 순환 참조란?

서로 다른 객체가 서로를 참조할 때 가비지 컬렉터가 작동되지 않고 메모리 누수가 발생되는 것이다.

이럴 때 해결 방법은 null 값을 할당해 연결을 끊는 방법이 있다.


3) 자바스크립트의 배열은 실제 자료구조 배열이 아닌데 그 이유는?

자바스크립트 배열은 해시 테이블로 구현된 객체 이므로 인덱스로 배열 요소에 접근하는 경우, 일반적인 배열보다

성능적인 면에서 느릴 수 밖에 없는 구조적인 단점을 가지고 있다.

하지만 특정 요소탐색, 삽입 또는 삭제 하는 경우에는 일반적인 배열보다 빠른 성능을 기대할 수 있다.

profile
두 줄 소개

0개의 댓글