본문 바로가기
Programming Language/JavaScript

2. 데이터 타입과 변수

by Ray 2021. 1. 24.

데이터 타입

데이터 타입은 데이터를 메모리에 저장할 때 확보해야 하는 메모리 공간의 크기와 할당할 수 있는 유효한 값에 대한 정보, 그리고 메모리에 저장되어 있는 2진수 데이터를 어떻게 해석할 지에 대한 정보르 제공

javascript의 모든 값은 데이터 타입을 가지며, 7개의 데이터 타입을 제공한다.

원시 타입(primitive data type)

  • boolean (ture / false)

  • null (대소문자 구분)

  • underfined (선언 이후 할당되지 않은 값)

  • number (64비트 부동소수점 형)

  • string (작은 따옴표나 큰 따옴표 사용)

  • symbol(es6에서 추가. 변경 불가능한 원시 타입의 값)

    ex) var key = Symbol('key'); // 심볼 key는 이름의 충돌 위험이 없는 유일한 객체의 프로퍼티 키

    console.log(typeof key); // symbol

객체 타입(object / reference type)

  • object

    : 데이터와 그 데이터에 관련된 동작을 모두 포함할 수 있는 개념적 존재

    원시타입을 제외한 나머지 값(배열, 함수, 정규표현식 등)

    pass-by-reference(참조 전달)

변수

프로그램에서 사용되는 데이터를 일정 기간 기억하고 재사용하기 위해 데이터에 고유한 식별자를 명시한 것

식별자 - 변수명 , 데이터 - 변수값

변수는 var, let, const 로 선언하고 할당 연산자로 할당하며, 변수명을 이용하여 참조한다

(var은 함수레벨 스코프, let&const는 블록 레벨 스코프)

변수 선언 및 할당

ex)

var score; // 변수의 선언

score = 80; // 값의 할당

score = 90; // 값의 재할당

score; // 변수의 참조

 

// 변수의 선언과 할당

var average = (50 + 100) / 2;

 

※ 값을 할당하지 않은 변수 : underfined 이라는 초기값

선언하지 않은 변수 : ReferenceError 발생

변수명 명명 규칙

  • 반드시 영문자(특수문자 제외), underscore ( _ ), 또는 달러 기호($)로 시작하여야 한다. 이어지는 문자에는 숫자(0~9)도 사용할 수 있다.
  • 자바스크립트는 대/소문자를 구별하므로 사용할 수 있는 문자는 “A” ~ “Z” (대문자)와 “a” ~ “z” (소문자)이다.

동적 타이핑(Dynamic Typing)

JavaScript는 동적 타입 언어 → 변수의 타입지정 없이 할당과정에서 값의 타입에 따라 타입이 결정됨

⇒ 같은 변수에 여러 타입의 값 할당 가능 : 동적 타이핑

ex)

var foo;

console.log(typeof foo); // undefined

 

foo = null;

console.log(typeof foo); // object

 

foo = {};

console.log(typeof foo); // object

 

foo = 3;

console.log(typeof foo); // number

 

foo = 3.14;

console.log(typeof foo); // number

 

foo = 'Hi';

console.log(typeof foo); // string

 

foo = true;

console.log(typeof foo); // boolean

 

변수 호이스팅(Variable Hoisting)

호이스팅 : 모든 선언문이 해당 Scope의 선두로 옮겨진 것처럼 동작하는 특성

⇒ JavaScript는 모든 선언문(var, let, const, function, function*, class)이 선언되기 이전에 참조 가능

ex)

console.log(foo); // ⇒ undefined

 

var foo = 123;

console.log(foo); // ⇒ 123

 

{

  var foo = 456;

}

console.log(foo); // ⇒ 456

Var 로 선언된 변수의 문제점

  • 함수 레벨 스코프

    : 전역변수의 남발

  • var 키워드 생략 허용

    : 의도하지 않은 변수의 전역화

  • 중복 선언 허용

    : 의도하지 않은 변수값 변경

  • 변수 호이스팅

    : 선언전 참조 가능

 

let, const 호이스팅

변수 생성은 선언-초기화-할당이라는 3단계로 이루어진다.

var로 선언된 변수는 선언과 초기화가 한번에 이루어진다.

즉, 변수 호이스팅으로 var변수는 선언되 되고 undefined라는 값을 가지게되며,

할당 부분에서 실제 값을 할당받는다.

let키워드로 선언된 변수는 선언과 초기화가 분리되어 진행된다.

즉, 호이스팅으로 인해 let 변수는 선언이 되었지만 초기화가 되지 않았기 때문에,

변수 선언문 이전에서 ReferenceError을 발생시킨다.

이렇듯 스코프의 시작지점부터 초기화 시작부분까지의 구간을 'TDZ : Temporal Dead Zone' 일시적 사각지대라고 한다.

ex)

      console.log(foo); // undefined var foo;

      console.log(bar); // Error: Uncaught ReferenceError: bar is not defined let bar;

'Programming Language > JavaScript' 카테고리의 다른 글

6. 객체  (0) 2021.01.24
5. 함수  (0) 2021.01.24
4. 제어문  (0) 2021.01.24
3. 연산자  (0) 2021.01.24
1. JavaScript란?  (0) 2021.01.24