Javascript 공부 - 003

변우영·2024년 8월 14일

Javascript

목록 보기
3/7

<목표>

  • Javascript의 메모리와 데이터 구조
  • 실행 컨텍스트

1. 메모리 관리

메모리는 두 가지 영역으로 나뉜다

  • 힙(Heap): 동적으로 생성된 객체와 함수가 저장되는 메모리 공간이다. 객체나 배열과 같은 복잡한 데이터 구조가 이 영역에 저장된다.
  • 스택(Stack): 함수 호출, 지역 변수 및 기본 타입(Primitive types)이 저장되는 메모리 공간이다. 함수가 호출되면 관련된 정보가 스택에 쌓이고, 함수가 종료되면 스택에서 제거된다.

2. 데이터 타입

크게 두 가지 데이터 타입을 가진다.

기본 타입 (Primitive types):

  • Number: 정수와 부동소수점 숫자를 모두 표현
  • String: 텍스트 데이터를 저장
  • Boolean: 참(true) 또는 거짓(false)을 나타냄
  • Symbol: 고유한 식별자를 생성하는 데 사용
  • undefined: 변수에 값이 할당되지 않은 상태를 나타냄
  • null: 의도적으로 값이 비어있음을 나타냄
  • BigInt: 큰 정수를 표현

특징

  • 불변성: 기본 데이터는 불변합니다. 즉, 한 번 생성된 값은 변경될 수 없다. 새로운 값을 만들려면 기존 값을 대체해야 한다.
  • 값 전달: 기본 데이터 타입은 값이 함수나 변수에 전달될 때 값 자체가 복사된다. 그래서 다른 변수에 동일한 값을 할당하더라도, 서로 독립적인 값을 가지게 된다.
let a = 10;
let b = a; // a의 값을 b에 복사
b = 20;    // b의 값을 변경
console.log(a); // 10, a는 여전히 10
console.log(b); // 20

참조 타입 (Reference types):

  • 객체(Object): 키-값 쌍의 집합
  • 배열(Array): 인덱스된 값들의 집합
  • 함수(Function): 특정 작업을 수행하는 코드를 정의하는 객체
  • 날짜(Date): 날짜와 시간을 표현
  • 맵(Map), 셋(Set) 등도 참조 타입에 포함

특징

  • 가변성: 참조 데이터 타입은 가변적이다. 객체나 배열의 속성이나 요소는 변경될 수 있다.
  • 참조 전달: 참조 데이터 타입은 변수나 함수에 전달될 때 값이 아니라 메모리 주소(참조)가 전달된다. 즉, 변수는 실제 데이터를 가리키는 참조를 가지고 있으며, 이를 통해 원본 데이터에 접근하고 수정할 수 있다.
let obj1 = { name: "Alice" };
let obj2 = obj1; // obj1의 참조를 obj2에 할당
obj2.name = "Bob"; // obj2를 통해 값을 변경
console.log(obj1.name); // "Bob", obj1도 변경됨

3. 스코프와 클로저

변수나 함수가 접근할 수 있는 영역을 나타낸다.
자바스크립트에는 세 가지 주요 스코프가 있다.

  • 전역 스코프: 어디서든 접근할 수 있는 범위.
  • 함수 스코프: 함수 내부에서만 접근할 수 있는 범위.
  • 블록 스코프: {}로 둘러싸인 코드 블록 내부에서만 접근할 수 있는 범위(let, const 키워드로 선언된 변수).
  • 클로저(Closure): 함수가 생성될 때의 스코프를 기억하고, 그 스코프 외부에서도 참조할 수 있는 함수이다. 클로저는 자바스크립트에서 비동기 작업이나 콜백에서 많이 사용한다.

4. 가비지 컬렉션

  • JavaScript자동 메모리 관리를 위해 가비지 컬렉션이라는 메커니즘을 사용한다. 더 이상 사용되지 않는 객체나 값은 자동으로 메모리에서 제거한다

5.실행 컨텍스트(Execution Context)

  • 실행 컨텍스트(Execution Context)는 코드가 실행되는 환경을 의미한다. 코드가 실행될 때, 실행 컨텍스트는 변수, 함수, 객체 등의 데이터를 관리하고, 이들이 어떻게 실행될지를 결정하는 데 중요한 역할을 한다.

실행 컨텍스트의 주요 구성 요소

  • 변수 객체(Variable Object, VO)
    함수가 실행될 때 해당 함수에 정의된 변수, 함수 선언, 매개변수 정보를 담고 있는 객체이다.
    ES6 이후로는 활성화 객체(Activation Object, AO)라는 개념으로 표현되며, 이는 arguments 객체를 포함한다.
    전역 실행 컨텍스트의 경우, 전역 객체(Global Object)가 변수 객체가 된다.

  • 스코프 체인(Scope Chain)
    현재 실행 컨텍스트가 참조할 수 있는 모든 변수 객체의 리스트이다.
    함수가 중첩되어 있을 때, 내부 함수는 외부 함수의 변수에 접근할 수 있다. 이때 스코프 체인이 사용된다.
    현재 실행 중인 컨텍스트의 변수 객체와 상위 컨텍스트의 변수 객체들을 연결하여 변수 검색을 수행한다.

  • this 바인딩(this binding)
    this 키워드가 참조하는 객체를 정의한다.
    전역 실행 컨텍스트에서는 this가 전역 객체를 가리키며, 함수나 메서드 내부에서는 호출 방법에 따라 달라진다.

profile
개발자로 한걸음!

0개의 댓글