Home 04 - Variables
Post
Cancel

04 - Variables

1
10 + 20

1. 변수


계산(평가evaluate)
기호(리터럴literal, 연산자operator)
식(표현식expression)
해석(파싱parsing)
피연산자operand

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

  • 변수 이름(변수명)
    : 메모리 공간에 저장된 값을 식별할 수 있는 고유한 이름

★ 변수에 여러 개의 값 저장하는 방법
  여러 개의 값을 저장하기 위해선 여러 개의 변수를 사용해야 하지만, 배열이나 객체 등의 자료구조를 통해 여러 개의 값을 그룹화해서 하나의 값처럼 사용 가능.

1
2
3
4
5
6
7
8
9
var userId = 5;
var userName = 'Kim';

var user = { id: 5, name: 'Kim' };

var users = [
    { id: 5, name: 'Kim' },
    { id: 10, name: 'Park' }
]
  • 변수 값
    : 변수에 저장된 값

  • 할당assignment(대입, 저장)
    : 변수에 값을 저장하는 것

  • 참조reference : 변수에 저장된 값을 읽어 들이는 것


2. 식별자

식별자identifier
: 어떤 값을 구별해서 식별할 수 있는 고유한 이름
변수 이름을 식별자라고도 한다.

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


3. 변수 선언

변수 선언variable declaration
: 변수를 생성하는 것.
값을 저장하기 위한 메모리 공간을 확보allocate,
변수 이름과 확보된 메모리 공간의 주소를 연결name binding해서
값을 저장할 수 있게 준비하는 것.

변수 사용하려면 반드시 선언이 필요함.
변수를 선언할 때는 var, let, const 키워드를 사용함.
(letconst는 ES6에서 도입됨)

  3.1. var 키워드로 변수 선언

1
var score;


  ※키워드keyword
  : 자바스크립트 엔진은 키워드를 만나면 자신이 수행해야 할 약속된 동작을 수행한다.

  ※undefined
  : 자바스크립트에서 제공하는 원시 타입의 값primitive value.
 변수를 선언하고 값은 할당하지 않았으면, 이 메모리 공간은 비어 있는 것이 아니라
 자바스크립트 엔진에 의해 undefined라는 값이 암묵적으로 할당되어 초기화된다.

  ※변수 이름이 등록되는 곳
  : 변수 이름을 비롯한 모든 식별자는 실행 컨텍스트execution context에 등록됨.

  3.2. ReferenceError(참조 에러)

식별자를 통해 값을 참조하려 했지만, 자바스크립트 엔진이 등록된 식별자를 찾을 수 없을 때 발생.
(선언하지 않은 식별자에 접근 시 발생.)


4. 변수 선언의 실행 시점과 변수 호이스팅

1
2
3
console.log(score);

var score;
1
2
/* 결과 */
undefined

참조 에러가 아닌, undefined가 출력되는 이유
: 변수 선언이 런타임runtime(소스코드가 한 줄씩 순차 실행되는 시점)이 아니라 그 이전 단계에서 먼저 실행되기 때문.
     => js 엔진은 변수 선언이 어디 있든지 다른 코드보다 먼저 실행함.
      이러한 특징을 변수 호이스팅variable hoisting이라 함.


5. 값의 할당

변수에 값 할당assignment할 땐 = 사용.

1
2
var score;
score = 100;

5.1. 변수 선언과 값 할당의 실행 시점

변수 선언과 값의 할당의 실행 시점은 다르다.
즉,
 변수 선언: 런타임 이전에 먼저 실행
 값의 할당: 런타임에 실행


6. 값의 재할당

var 키워드로 선언한 변수는 값 재할당 가능.

6.1. const 키워드

const 키워드로 선언한 변수는 재할당 금지됨.
즉, const 키워드는 단 한 번만 할당 가능한 변수를 선언함.

1
2
const val = 100;
val = 50;
1
2
3
4
foo = 100;
    ^

TypeError: Assignment to constant variable.

6.2. 가비지 콜렉터garbage collector

애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여
더 이상 사용되지 않는 메모리를 해제release하는 기능.
가비지 콜렉터를 통해 메모리 누수memory leak 방지함.


7. 식별자 네이밍 규칙

식별자identifier
: 어떤 값을 구별해서 식별해낼 수 있는 고유한 이름

 - 식별자는 특수문자 제외한 문자, 숫자, 언더스코어(_), 달러 기호($)를 포함 가능
 - 식별자는 특수문자 제외한 문자, 숫자, 언더스코어(_), 달러 기호($)로 시작해야 함. 숫자로 시작은 허용되지 않음.
 - 예약어reserved word는 사용 불가.

7.1. 대소문자 구별

1
2
3
var thisisval = 10;
var thisisVal = 20;
var THISISVAL = 30;
1
2
3
10
20
30

7.2. 네이밍 컨벤션naming convention

1
2
3
4
5
6
7
8
9
10
11
// camelCase
var thisisVal;

// snake_case
var thisis_val;

// pascalCase
var ThisisVal;

// typeHungarianCase
var strThisisVal;
Contents