학습할 것

  • 프리미티브(Primitive) 타입의 종류와 값의 범위, 그리고 기본 값
  • 프리미티브 타입과 레퍼런스 타입
  • 리터럴 타입
  • 변수 선언 및 초기화하는 방법
  • 변수의 스코프와 라이프타임
  • 타입 변환: casting, coercion
  • 1차 및 2차 배열 선언하기
  • 타입 추론, var, let

프리미티브(Primitive) 타입의 종류와 값의 범위, 그리고 기본 값

원시 타입(Primitive type)은 6개의 종류가 존재하는데, number type, string type, boolean type, undefined type, null type, symbol type이 있다.

  • number type: 모든 수를 실수로 표현하며, infinity(양의 무한대), -infinity(음의 무한대), NaN(Not-a-Number)이라는 세 가지 특정한 값이 추가로 존재한다.
  • string type: UTF-16을 사용하며, ' '," ", 으로 텍스트를 감싼다. 위 세 따옴표로 감싸지 않으면 엔진은 텍스트가 아닌 키워드나 식별자로 판단한다.
  • boolean type: true와 false만 존재하며, 논리적 참과 거짓을 나타낸다.
  • undefined type: 변수 선언에 의해 확보된 메모리 공간을 엔진이 garbage value로 놔두지 않고 undefined로 초기화하기 위한 타입이다.
    알아볼 것- undefined로 초기화되지 않은 garbage value를 확인하는 방법
  • null type: 변수에 값이 없다는 것을 의도적으로 표기하기 위한 데이터 타입이다. JavaScript는 대소문자를 구분하므로 Null, NULL과 다르다.
    알아볼 것- null, Null, NULL의 차이
  • symbol type: ES6에서 새로 추가된 데이터 타입으로, 반드시 Symbol 함수를 호출하여 생성되며 다른 값과 중복되지 않는다.

프리미티브 타입과 레퍼런스 타입

프리미티브 타입 데이터는 변수에 할당될 때 메모리 크기가 정해지며, 변경이 불가능한 읽기 전용 데이터이다. 프리미티브 타입 데이터를 변경하면 메모리의 값이 변경되는 것이 아니라 메모리가 새로 할당되며, 변수는 새롭게 재할당된 원시 값을 나타낸다. 즉 변수 a의 데이터를 b로 복사한 후 a의 데이터를 변경하여도 b의 데이터는 변경되지 않는다.

레퍼런스 타입 데이터는 property의 갯수가 정해져 있지 않고, 추가되거나 변경 혹은 삭제될 수 있다. 그러므로 메모리 크기를 미리 정해 놓을 수 없다. 그러므로 변수에 할당될 때 객체 자체의 주소가 아닌, 참조 값(reference value)의 주소를 받는다. reference value는 객체가 저장된 메모리의 주소만을 나타내며, 즉 변수 a의 데이터를 b로 복사한 후 a의 데이터를 변경하면 b의 데이터 또한 변경된다.

리터럴 타입

리터럴을 사용하여 데이터 타입을 표현한 것.
리터럴은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법을 말한다.
예를 들어 16진수의 리터럴은 0x이며, 0xFFFFFF 와 같이 표현된다.

변수 선언 및 초기화하는 방법

변수 선언 방법에는 세 가지가 있다.

var: 변수에 초기 값을 지정하지 않는다면 undefined 값을 가짐
어떤 함수 안에서 선언되었다면 그 함수 전체에 대하여 유효하며, 미처 변수가 선언되기 전조차도 유효하다. 이를 위해 엔진은 함수 안에 있는 모든 변수를 함수 맨 꼭대기로 끌어올린다(Hoisting).

let: 변수에 초기 값을 지정하지 않으면 역시 undefined 값을 가짐
변수가 선언된 블록, 구문 또는 표현식 내에서만 유효하며, 변수가 초기화 혹은 선언되기 전에 참조할 경우 ReferenceError가 발생한다.

const: 유효 범위는 let과 동일하지만, 값의 재할당 및 재선언도 불가능하다. 즉 처음 선언할 때 반드시 초기화를 해야한다. 또한 관습적으로 대문자를 사용하여 선언한다.

예외적으로 x = 5와 같은 식으로 변수를 생성 할 수도 있는데, 사용하지 않는 것이 좋다.

변수의 스코프와 라이프타임

변수의 스코프에는 global과 local이 있다.
global scope는 코드 어느 곳에서나 해당 변수에 접근할 수 있다는 의미의며, 이 속성을 가진 변수는 코드가 시작될 때부터 끝날 때까지 존재한다. local scope는 코드의 특정 부분에서만 사용 가능하므로 이 속성을 가진 변수는 함수가 시작될 때 생성되고 함수가 끝나면 삭제된다.

타입 변환: casting, coercion

JavaScript의 타입은 언제든지 변경될 수 있다. 이중 개발자가 의도적으로 값의 타입을 변경하는 것을 casting, 엔진이 암묵적으로 변경하는 것을 coercion이라고 한다.

1차 및 2차 배열 선언하기

1차 배열 선언

var newArray = new Array();

2차 배열 선언: 2행 3열 기준

var newArray = new Array(2);
myArray[0] = new Array (3);
myArray[1] = new Array (3);

or

var myArray = new Array(new Array(3), new Array(3));

타입 추론

명시적인 타입 표기 없이도 엔진이 값의 타입 정보를 추론하는 것이다.
자바스크립트는 타입 추론을 지원하지 않는다.

출처

profile
귀차니즘 탈출 시도중

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN