모.자 DeepDive 02 _ 변수와 표현식

🖌 변수

변수 왜 필요할까?

변수는 프로그래밍 언어에서 데이터를 관리하기 위한 핵심 개념이다.
사람이 무언가를 연산하기 위해서 각각 숫자의 의미와 연산자와 그 계산 값을 두뇌에 저장하는 것 같이
컴퓨터도 일련의 동작을 수행하는데, 사람은 연산의 모든 과정을 두뇌 한군데에서 하는 데에 반해
컴퓨터는 CPU에서 연산하고 메모리에서 데이터를 기억하는 구조를 가지고 있다.
결국 연산의 결과를 사용하고 싶으면 결과가 저장된 메모리의 주소를 알아야 하는데, 직접적으로 주소를 아는 것에는 한계가 있기 때문에 이를 프로그래밍 과정에 사용하는 것은 무리가 있다.
따라서, 사람에게 사람의 고유한 이름이 있는것처럼 메모리에도 이름을 붙여주어 값을 저장(할당)하고 재사용(참조) 할 때 편하게 만든다. 메모리에 이름을 붙여주고 공간을 확보하는 것을 변수라고 한다.

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

많은 개발자들이 네이밍 하는데에 많은 고심을 하는데, 변수는 사람의 언어로 메모리에 저장된 값에 상징성을 부여한 것이기 때문에 의도를 명확히 하는 이름이 중요하기 때문이다.

변수 선언

자바스크립에서 변수 선언은 var, let, const 키워드를 사용하는데, var 사용은 많이 지양하고 있다.
선언한다는 것은 공간을 확보하는 것으로, 아직 값이 할당되지 않는 상태이다.
선언 후 처음 값을 할당해 주는 것을 '초기화'라고 하는데, 이를 하지 않을 경우 이전의 값이 남아 쓰레기 값(garbage value)이 나올 수 있다.

변수 호이스팅

변수 선언 키워드 중 var 사용은 지양하고 있다고 얘기했는데, 그 이유가 바로 변수 호이스팅때문이다.

변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 변수 호이스팅이라(Variable hoisting) 한다.

자바스크립트는 소스코드가 한 줄씩 순차적으로 실행되는데, var를 사용하여 변수를 선언하면 변수를 먼저 사용하고 후에 변수가 선언 되었더라도 문제를 인식하지 못하고, 블럭 안에 선언하고 블럭 밖에서 해당 변수를 사용할 경우에도 문제를 인식하지 못한다. 프로젝트의 크기기 커질수록 이런 문제들로 인해 야기 되는 다른 큰 문제들이 생기기 때문에 var 대신 let과 const 사용을 지향한다.

// 선언 전 사용
console.log(num); // undefined 문제인식 못함.
var num = 8;
console.log(num); // 8

// 블럭 안 선언 후 블럭 밖에서 사용
{
name = zeke;
var name;
}
console.log(name) // zeke

값의 재할당과 가비지 콜렉터(Gabage collector)의 등장

값의 재할당은 변수 초기화시 할당한 값이 아닌 다른 값을 부여해 주는 것인데, 처음 10으로 할당하고 나중에 80으로 값을 재할당 한다고 했을 때, 이전의 10의 값이 사라지고 그 자리에 다시 80이 할당되는 것이 아니다.
10이 저장된 메모리 공간의 변수와 같은 식별자를 없애고, 다시 메모리 공간을 마련하여 재할당한 80에 해당 변수이름을 붙여주는 것이다. 이렇게 되면 전에 사용했던 10의 값은 필요 없는 쓰레기 값이 되어 버린다.
이런 쓰레기 값들은 메모리 누수방지를 위해 주기적으로 청소가 필요한데, 이 청소부가 바로 가비지 콜렉터이다.

변수 네이밍

변수는 카멜케이스(camelCase)를 사용하여 네이밍한다.
문자, 언더스코어(_), 달러기호($)로 시작할 수 있고, 이들과 숫자를 포함하여 네이밍 할 수 있다.

📖 표현식과 문

값은 식이 평가되어 생성된 결과이다

리터럴은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법이다.

표현식은 값으로 평가 될 수 있는 문이다.

토큰은 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소이다.


이 시리즈의 모든 글은 모던 자바스크립트 Deep Dive를 읽고 작성된 글이며, 인용글은 모두 이 책의 내용을 인용했습니다.

좋은 웹페이지 즐겨찾기