본문 바로가기

개발/모던 자바스크립트 DEEP DIVE

[기초부터 탄탄한 개발공부] 4장 변수

반응형

책 '모던 자바스크립트 DEEP DIVE' 를 요약한 내용입니다

4.1 변수란 무엇인가

 

아무리 복잡해도 데이터를 입력받아 처리하고

그 결과를 출력하는 것이 애플리케이션의 전부다

변수는 데이터를 관리하기 위한 핵심 개념

 

10 + 20 이라는 식 의미를 해석하려면 +를 수행하기 위해

+연산자의 좌변과 우변의 숫자 값, 즉 피연산자를 기억한다

 

사람은 계산과 기억을 모두 두뇌에서 하지만 컴퓨터는 연산과 기억을 수행하는 부품이 나눠져 있음

CPU로 연산하고, 메모리로 데이터를 기억함

 

메모리은 메모리 셀의 집합체다.

메모리 셀 하나의 크기는 1바이트(8비트)이며,

메모리의 셀의 크기, 즉 1바이트 단위로 데이터를 저장하거나 읽어 들인다

 

10 + 20 은 메모리 상의 임의 위치(메모리 주소)에 저장,

CPU는 이 값을 읽어 들여 연산을 수행,

연산 결과로 생성된 30 또한 메모리 상의 임의의 위치에 저장

(메모리에 저장되는 모든 값은 2진수로 저장)

 

그러나 CPU가 연산해서 만든 30은 재사용할 수 없다

이 연산결과를 단 한번 사용한다면 문제 없지만 재사용하려면 메모리공간에 직접 접근해야함

 

하지만 메모리 주소를 통해 값에 직접 접근하는 것은 치명적 오류를 발생시키기 높아 위험

실수로 운영체제가 사용하고 있는 값을 변경하면 조짐

따라서 자바스크립트는 개발자의 직접적인 메모리 제어를 허용하지 않는다

 

프로그래밍 언어는 값을 메모리에 저장하고, 저장된 값을 읽어 재사용하기 위해 변수라는 메커니즘을 제공

 

변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말한다

값의 위치를 가리키는 상징적인 이름

 

변수는 프로그래밍 언어의 컴파일러 또는 인터프리터에 의해 값이 저장된 메모리 공간의 주소로 취환되어 실행된다.

개발자가 직접 메모리 주소를 통해 값을 저장하고 참조할 필요 없이 변수를 통해 안전하게 값을 접근가능

 

4.2 식별자

 

변수 이름을 식별자라고도 함

식별자는 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 뜻함

식별자는 값이 아니라 메모리 주소를 기억함

=> 식별자가 기억하고 있는 메모리 주소를 통해 메모리 공간에 저장된 값에 접간할 수 있다는 의미

=> 메모리 주소에 붙인 이름

 

변수, 함수, 클래스의 이름은 모두 식별자다

변수, 함수, 클래스와 같은 식별자는 네이밍 규칙을 준수해야 하며, 선언에 의해 자바스크립트 엔진에 식별자의 존재를 알린다

 

4.3 변수 선언

 

변수 선언 : 값 저장을 위해 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간의 주소를 연결해서 값을 저장하게 준비하는 것

변수 선엔에 의해 확보된 메모리 공간은 확보해제 되기 전 누구도 확보된 메모리 공간을 사용할 수 없도록 보호됨

 

변수를 사용하려면 반드시 선언이 필요하다

var, let, const  키워드를 사용

 

var score

 

변수를 선언했지만, 값을 할당하지 않았다

이때 메모리공간에는 자바스크립트 엔진에 의해 undefined라는 값이 암묵적으로 할당되어 초기화 된다. 이건 자바스크립트의 독특한 특징

 

var score = 80;

 

이렇게 다시 하면, 이전에 있던 메모리공간을 지우고 그 메모리 공간에 80을 저장하는게 아니라 새 메모리 공간을 확보하고 그곳에 할당 값 80을 저장한다.

 

score = 90 이렇게 var를 빼도 새로운 공간에 값을 할당한다

이전에 할당된 undefined와 80은 계속 불필요하게 남아 있다

 

가비지콜렉터 : 할당한 메모리 공간을 주기적으로 검사하여 더 안 사용하는 메모리르 헤제 하는 기능을 뜻함. 메모리 누수를 방지

 

4.7  식별자 네이밍 규칙

 

식별자에는 void, for, if, await와 같은 예약어는 사용할 수 없다

숫자로 시작하는 것은 허용하지 않는다

 

자바스크립트는 보통

변수나 함수 이름에는 카멜케이스를 사용

생성자 함수, 클래스 이름에는 파스칼 케이스를 사용

 

 

반응형