자바스크립트의 메모리 관리



여러분들은 자바스크립트가 메모리를 어떻게 활용하는지 알고 계십니까?

사실 자바스크립트 개발자 중 그렇게 브라우저 메모리를 신경 쓰고 개발하는 경우는 많지 않습니다.

(여태까지 저만 그랬을 수도 있었습니다....)

 

하지만 C계열의 언어를 가지고 게임을 만들거나 임베디드를 다루는 사람들은 메모리 관리가 필수적이라 할 수 있습니다.

 

왜냐하면 임베딩이나 게임 개발은 컴퓨터의 메모리 누수를 최소한으로 줄여서 더 빠른 효율을 내야 하기 때문이죠.

 

그래서 임베디드 혹은 게임 현업에 투입될 때, 이것을 위해 고치고 발생하고 고치고를 반복하죠

 

하지만 자바스크립트 개발자는 크게 메모리 관리를 가지고 고민하지 않습니다.

왜그럴까요?

 

한번 자바스크립트 개발자가 메모리 관리를 중요하게 생각하지 않았던 이유를 한번 알아보도록 하겠습니다.

 

당신의 메모리는 재앙적인(catastrophe) 문제를 가지고 있으니, 귀여운 고양이를 보세요


컴퓨터 메모리에 대해서 알아보자

먼저 자바스크립트의 메모리를 어떻게 활용하는지를 알아보기 전, 컴퓨터가 어떻게 메모리를 다루는지에 대해서 알아보도록 하겠습니다.

 

여러분들은 세상이 무엇으로 이루어져 있다고 생각하시나요?

일단 저는 세상이 뭘로 이루어져 있는지는 모르겠고, 컴퓨터 세상은 0과 1로 이루어져 있습니다

그 말은 즉, 우리가 사용하는 크롬, VSCode 같은 프로그램은 결과적으로는 0과 1로 이루어져 있죠.

 

왜 0과 1로밖에 안 되어 있나요?라고 물어본다면 많은 이유가 있겠지만,

제가 알고 있는 이유로는 0과 1로 덧셈, 뺄셈 등의 사칙연산이 가능하며,

더 나아가, 컴퓨터에서 보일 수 있는 모든 것을 표현할 수 있기 때문입니다.

(좀 더 들어가면 이산수학 시간이 되기 때문에 자세한 건 넘어가도록 하겠습니다.)

 

출처 : http://newsteacher.chosun.com/site/data/html_dir/2015/03/12/2015031200424.html

 

그렇기 때문에 이 0과 1은 컴퓨터가 사용하는 데이터입니다.

이 데이터는 컴퓨터 어딘가에 저장해야 나중에 쓸 수 있고,

이 데이터를 저장하는 저장소의 크기를 비트(bit)라는 용어를 사용하여 구분하기로 했습니다.

즉, 데이터 1을 담고 있는 저장소의 크기는 1비트(bit)인 거죠

 

어때요? 여기까진 쉽죠?

자, 이제 좀 더 들어가 볼까요?

 

우리는 컴퓨터 어딘가에 1이라는 데이터를 1비트 크기의 메모리에 저장했습니다.

그리고 1주일 뒤 우리는 저장해 둔 데이터를 가져와서 쓰려고 컴퓨터에 요청했습니다.

 

"나의 친구 콤퓨타야~, 나의 1이라는 데이터를 가져와 줄 수 있니??"

"물론이지 친구야, 여기 있어"

 

하면서 컴퓨터는 저에게 1이라는 데이터를 똭 하고 주었습니다.

 

고마워~ 콤퓨타야~

 

근데 생각해보면 모든 데이터가 0과 1로 이루어져 있는데 컴퓨터는 그 많은 0과 1중에서

사용자가 원하는 1을 찾을 수 있었을까요?

 

사실 컴퓨터는 사용자가 원하는 데이터를 기반으로 찾은 게 아닙니다.

그 데이터가 저장되어 있는 주소를 가지고 찾은 것이죠.

 

사실 각각의 1비트의 메모리마다 각각의 주소를 가지고 있습니다.

이 주소는 고유해서 컴퓨터 안에 중복되는 주소를 가질 수 없고요,

그래서 컴퓨터는 이 주소를 가지고 중복되는 데이터 안에서 사용자가 원하는 데이터를 찾을 수 있었던 겁니다.

 

하지만, 제가 아까 말했죠?

컴퓨터는 1비트당 1개의 주소를 가지고 있다고...

이러한 경우 모든 비트의 주소를 알고 있어야 하므로 메모리 관리에 효율적이지 않습니다.

 

그렇기 때문에 우리의 친구 컴퓨터는 이 메모리를 효율적으로 관리하기 위해서

8개의 비트(bit)를 묶어서 바이트(byte)라는 단위를 만들어 냈습니다.

 

그렇게 해서 컴퓨터는 바이트의 첫 번째 주소만 가지고 있으면,

데이터의 묶음인 바이트 메모리에 접근해서 사용자가 원하는 데이터를 더 효율적으로 접근할 수  있게 되었습니다.

 


 

자바스크립트가 메모리를 관리하는 법

자 우리는 컴퓨터가 어떻게 메모리를 관리하는지 알아보았습니다.

그럼 이제 자바스크립트가 메모리를 관리하는 법에 대해서 알아볼까요?

 

여러분들은 자바스크립트를 사용하면서 혹시 메모리 관리를 해보신 경험이 있으신가요?

사실 많이 없으실 것이라 생각합니다.

 

자바스크립트도 프로그래밍 언어이기 때문에 메모리 관리를 해줘야 할 텐데 왜 굳이 신경을 안 써도 될까요?

 

 

자바스크립트도 Garbage Collector를 가지고 있습니다.

 

왜냐하면, 자바스크립트는 고수준 언어이기 때문에 대부분의 고수준 언어가 가지고 있는 GC(Garbage Collector)가 존재하여 메모리를 관리하고 있기 때문이죠.

 

그리고, 또 다른 이유는 옛날 컴퓨팅에서 숫자를 저장할 때 short(2 바이트)을 사용하다 메모리가 부족하면 int(4 바이트)로 형 변환을 해줘야 하는 시절과는 달리

 

 

현재의 컴퓨팅은 메모리가 상대적으로 커졌으며 이러한 여유로운 메모리 덕분에 우리의 자바스크립트는 이렇게 말합니다.

 

"야!! 너 그냥 귀찮으니까 64bit(8byte) 메모리 할당해 줄게, 가져!!"

 

이렇게 자바스크립트의 통 큰 메모리 할당 덕분에 자바스크립트 개발자는 젖과 꿀이 흐르는 메모리에서 데이터를 저장할 수 있게 된 것이지요


마무리

자! 오늘은 컴퓨터가 메모리를 관리하는 법과, 자바스크립트가 메모리 관리를 안 해도 되는 이유에 대해서 알아보았습니다.

 

다음 포스팅에선 자바스크립트에 데이터 타입에 대해서 알아보도록 하겠습니다.

 

만약 포스트에 문제가 있거나 틀린 부분이 있다면 댓글을 남겨주시기 바랍니다.

감사합니다.

 

이 글을 공유하기

댓글