6.데이터 타입

김미진·2022년 7월 1일
0

데이터 타입

  • 값의 종류
  • 7개의 데이터 타입을 제공한다.(원시타입과 객체타입)

원시타입

1. 숫자 타입
배정밀도 64비트 부동소수점 형식의 2진수로 저장
모든 수를 실수로 처리
정수만 표현하기 위한 데이터 타입은 존재하지 않는다

var binary = 0b10000001; //2진수
console.log(binary); //65
console.log(1 === 1.0); //true - 숫자타입은 모두 실수로 처리
console.log(10/0); //Infinity
console.log(10/-0); //-Infinity
console.log(1*'String'); //NaN

2. 문자열 타입
0개 이상의 16비트 유니코드 문자의 집합
작은따옴표'', 큰따옴표"", 백틱``으로 텍스트를 감싼다.

  • 문자열을 따옴표로 감싸는 이유는?
    키워드나 식별자 같은 토큰과 구분하기 위해서다.
    따옴표로 감싸지 않는다면 공백문자 포함시킬 수 없다.

템플릿 리터럴

  • 백틱``을 사용해 표현

1) 멀티라인 문자열
일반 문자열 내에선 줄바꿈 허용 불가
줄바꿈 등의 공백을 표현하려면 백슬래시 \로 시작하는 이스케이프 시퀀스를 사용
(ex. \n, \t...)

//일반 문자열에 이스케이프 시퀀스를 사용한 경우
var template = '<ul>\n\t<li><a href="#">Home</a></li>\n</ul>';

//템플릿 리터럴을 사용한 경우
var template=`<ul>
	<li><a href="#">Home</a></li>
</ul>`

두 경우의 출력결과는 아래와 동일하다.

<ul>
	<li><a href="#">Home</a></li>
</ul>

2) 표현식 삽입

문자열은 문자열 연산자 +를 사용해 연결할 수 있다.

var first = 'Mi-jin';
var last = 'Kim';
console.log('My name is ' + first + ' ' + last + '.'); //My name is Mi-jin Kim;

템플릿 리터럴 내에선 표현식을 ${}으로 감싸서 표현한다.

console.log(`My name is ${first} ${last}.`); //My name is Mi-jin Kim;

표현식 삽입은 반드시 템플릿 리터럴 내에서 사용! 템플릿 리터럴이 아닌 일반 문자열에서의 표현식 삽입은 문자열로 취급된다.

console.log('1 + 2 = ${1 + 2}'); //1 + 2 = ${1 + 2}

3. 불리언 타입
논리적 참, 거짓을 나타내는 true, false가 있다.

var foo = true;
console.log(foo); //true

4. undefined 타입
undefined 값이 유일하다.
undefined는 자바스크립트 엔진이 변수를 초기화할 때 사용하는 값이다.

  • 만약 변수에 값이 없다는 것을 명시하고 싶을 때 undefined를 할당해도 될까?
    의도적으로 변수에 undefined를 할당한다면 undefined의 본래 취지와는 어긋날뿐더러 혼란을 줄 수 있으므로 권장하지 않는다. 변수에 값이 없다는 것을 명시하고 싶을 땐 null을 할당하면 된다.

5. null 타입
null이 유일하다.
null은 변수에 값이 없다는 것을 의도적으로 명시할 때 사용한다.
변수에 null을 할당하는 것은 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미이므로 자바스크립트 엔진은 참조되지 않는 메모리 공간에 대해 가비지 콜렉션을 수행한다.

var foo = 'Lee';
foo = null; //이전 참조를 제거, foo는 더 이상 'Lee'를 참조하지 않으므로 가비지컬렉터가 정리.

함수가 유효한값을 반환할 수 없는 경우에도 명시적으로 null을 반환하기도 한다.

6. 심벌 타입
다른 값과 중복되지 않는 유일무이한 값이다.
Symbol함수를 호출해 생성한다.

var key = Symbol('key');
console.log(typeof key);
//객체 생성
var obj = {};
//이름이 충돌할 위험이 없는 유일무이한 값인 심벌을 프로퍼티키로 사용
obj[key] = 'value';
console.log(obj[key]); //value

객체 타입

자바스크립트를 이루고 있는 거의 모든 것이 객체이다.
원시타입 이외의 값은 모두 객체 타입이다.

데이터 타입이 필요한 이유

var score = 100;
  • 값을 저장할 때, 데이터 타입에 따라 확보해야 할 메모리 공간의 크기를 결정하기 위해서다.
    자바스크립트 엔진은 리터럴 100숫자타입의 값으로 해석한다.
    해당 값을 저장하기 위해 8바이트의 메모리 공간을 확보한 후 100을 2진수로 저장한다.
  • 값을 참조할 때, 한번에 읽어들여야 할 메모리 공간의 크기를 결정하기 위해서다.
    score 변수에는 숫자타입의 값이 할당되어 있으므로 엔진은 score 변수를 숫자 타입으로 인식한다. 숫자타입은 8바이트 단위로 저장되므로 score 변수를 참조하면 8바이트 단위로 메모리 공간에 저장된 값을 읽어들인다.
  • 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해서다.
    메모리에 저장된 값, 0100 0001은 데이터 타입에 따라 숫자타입으로 해석하면 65, 문자열타입으로 해석하면 'A'다.
    score변수에 할당된 값은 숫자타입의 값이므로 score변수를 참조하면 메모리 공간의 주소에서 읽어들인 2진수를 숫자로 해석한다.

정적타입언어

정적타입언어는 변수를 선언할 때 변수에 할당할 수 있는 데이터 타입을 사전에 선언해야 한다.(=명시적 타입 선언)

char c; //1바이트 정수타입의 값만 할당가능
int num; //4바이트 정수타입의 값만 할당가능

변수에 선언한 타입에 맞는 값만 할당할 수 있다!
타입체크를 수행 -> 통과못하면 에러 발생, 프로그램 실행 중단 -> 안정적인 코드구현 -> 런타임에 발생하는 에러 감소
ex. C, C++, Java, ...

동적타입언어

동적타입언어는 변수를 선언이 아닌 할당을 통해 타입이 결정된다.
재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다.
ex. Javascript, Python, PHP, ...

  • 변수는 타입을 가질까?
    기본적으로 변수는 타입을 갖지 않지만, 값은 타입을 갖는다!
    따라서 현재 변수에 할당되어 있는 값에 의해 변수의 타입이 동적으로 결정된다!

참고 https://poiemaweb.com

profile
프론트엔드 개발자가 되고 싶은걸요! 오늘도 열공중

0개의 댓글