<commit_before># 자바스크립트 메모리 관리

- 본 글은 MDN의 자바스크립트 메모리 관리 라는 글을 보고 오랜만에 JS관련 좋은 글을 보게되어 작성하게 되었습니다.
- 원글 링크는 [MDN JS 메모리 관리](https://developer.mozilla.org/ko/docs/Web/JavaScript/Memory_Management) 입니다.


## 자바스크립트에서는 메모리 관리를 할 수 있는걸까?

- 자바스크립트를 어느 정도 사용했다고 생각했지만, 정말 우물 안 개구리라는 사실을 최근에 react를 하면서 실감하고 있습니다.
- ES5, ES6도 제대로 사용하지 못하면서 정말 야매로 자바스크립트를 사용해왔다는 사실은 자괴감만 느끼게 해줬습니다.
- 물론 js에서 메모리 관리를 할 수 있을 것이라는 생각도 해본적이 없습니다. 그렇게 엄청난 메모리가 누수되는(...) 쓰레기 코드를 양산하며 자바스크립트를 사용해왔습니다.
- C와 같은 경우는 malloc(), free()를 사용해서 메모리를 할당하고, 해제할 수 있는데 과연 자바스크립트는 어떻게 메모리 관리를 해주는 것일까요?

## 메모리 생존주기

- 놀랍게도 자바스크립트도 메모리 생존 주기가 있었습니다(...).

1. 필요할 때 할당.
2. 사용. (읽기, 쓰기)
3. 필요 없어지면 해제.

- 음? 필요 없어지면 해제한다는 부분이 가장 이해되지 않지만, 설명을 참고하면 명시적으로 free 해주지 않는다는 뜻이랍니다.
- 조금 더 자세히 살펴봐야 할 필요가 있다고 생각이 됩니다.

## 자바스크립트에서 메모리 할당하기

### 값 초기화

- 자바스크립트에서는 프로그래머들이 메모리를 하나하나 할당하는 고생을 줄여주기 위해 **값을 선언할 때** 메모리를 할당합니다.

```var _integer = 3; // 메모리 할당(정수)
var _string = "eunjeong" // 메모리 할당(문자열)

var person = {
  age: 1,
  address: null
};  // 객체와 그 객체에 포함된 값들을 담기 위한 메모리 할당

function sum(a, b){
  return a+b;
} //  함수를 위한 할당(함수 == 호출 가능한 object)

someElement.addEventListener('click', function(){
  someElement.style.color = 'green';
  }, false);  //  함수식 또한 객체를 담기 위한 메모리를 할당한다.
```

### 함수 호출을 통한 할당

```//  몇 가지 함수에서도 메모리 할당이 일어납니다.
var date = new Date(); // Date 개체를 위해 메모리 할당
var domElement = document.createElement('div'); //  DOM 엘리먼트를 위해 메모리를 할당
```


```//  메소드 일부도 새로운 값이나 객체를 담기 위해 메모리 할당을 한다.
var _string = "hello";
var _string2 = _string.substr(0,3); //  js에서 문자열은 불변(immutable)하는 값이기 때문에 범위 (0,3)만 저장(메모리 새로 할당하지 않음)<commit_msg>문법 수정3<commit_after># 자바스크립트 메모리 관리

- 본 글은 MDN의 자바스크립트 메모리 관리 라는 글을 보고 오랜만에 JS관련 좋은 글을 보게되어 작성하게 되었습니다.
- 원글 링크는 [MDN JS 메모리 관리](https://developer.mozilla.org/ko/docs/Web/JavaScript/Memory_Management) 입니다.


## 자바스크립트에서는 메모리 관리를 할 수 있는걸까?

- 자바스크립트를 어느 정도 사용했다고 생각했지만, 정말 우물 안 개구리라는 사실을 최근에 react를 하면서 실감하고 있습니다.
- ES5, ES6도 제대로 사용하지 못하면서 정말 야매로 자바스크립트를 사용해왔다는 사실은 자괴감만 느끼게 해줬습니다.
- 물론 js에서 메모리 관리를 할 수 있을 것이라는 생각도 해본적이 없습니다. 그렇게 엄청난 메모리가 누수되는(...) 쓰레기 코드를 양산하며 자바스크립트를 사용해왔습니다.
- C와 같은 경우는 malloc(), free()를 사용해서 메모리를 할당하고, 해제할 수 있는데 과연 자바스크립트는 어떻게 메모리 관리를 해주는 것일까요?

## 메모리 생존주기

- 놀랍게도 자바스크립트도 메모리 생존 주기가 있었습니다(...).

1. 필요할 때 할당.
2. 사용. (읽기, 쓰기)
3. 필요 없어지면 해제.

- 음? 필요 없어지면 해제한다는 부분이 가장 이해되지 않지만, 설명을 참고하면 명시적으로 free 해주지 않는다는 뜻이랍니다.
- 조금 더 자세히 살펴봐야 할 필요가 있다고 생각이 됩니다.

## 자바스크립트에서 메모리 할당하기

### 값 초기화

- 자바스크립트에서는 프로그래머들이 메모리를 하나하나 할당하는 고생을 줄여주기 위해 **값을 선언할 때** 메모리를 할당합니다.

```var _integer = 3; // 메모리 할당(정수)
var _string = "eunjeong" // 메모리 할당(문자열)

var person = {
  age: 1,
  address: null
};  // 객체와 그 객체에 포함된 값들을 담기 위한 메모리 할당

function sum(a, b){
  return a+b;
} //  함수를 위한 할당(함수 == 호출 가능한 object)

someElement.addEventListener('click', function(){
  someElement.style.color = 'green';
  }, false);  //  함수식 또한 객체를 담기 위한 메모리를 할당한다.
```


### 함수 호출을 통한 할당

```//  몇 가지 함수에서도 메모리 할당이 일어납니다.
var date = new Date(); // Date 개체를 위해 메모리 할당
var domElement = document.createElement('div'); //  DOM 엘리먼트를 위해 메모리를 할당
```


```//  메소드 일부도 새로운 값이나 객체를 담기 위해 메모리 할당을 한다.
var _string = "hello";
var _string2 = _string.substr(0,3); //  js에서 문자열은 불변(immutable)하는 값이기 때문에 범위 (0,3)만 저장(메모리 새로 할당하지 않음)
{'fraction_non_alphanumeric': 0.12280701754385964, 'fraction_numerical': 0.007832080200501253, 'mean_word_length': 2.8986568986568986, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1068374', 'n_tokens_mistral': 2499, 'n_tokens_neox': 3327, 'n_words': 526}