Search

3장 데이터 타입

대분류
언어
서적
소분류
JS DeepDive
주요 레퍼런스
https://velog.io/@hustle-dev/%EB%AA%A8%EB%8D%98-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-Deep-Dive-69%EC%9E%A5#06%EC%9E%A5---%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85
태그
숫자
문자열
불리언
null
객체
심볼
최종 편집 일시
2024/10/27 15:42
생성 일시
2024/01/24 11:24
13 more properties

데이터 타입 종류

원시
숫자(Number)
문자열(String)
불리언(Boolean)
Undefined
null
심벌(Symbol)
객체
객체(Object)
함수(Function)
배열(Array)

숫자(Number)

JS는 하나의 숫자 타입만 존재 (int, log, float 없음)
console.log(1 === 1.0); // true
JavaScript
복사
모든 수를 실수로 처리
배정밀도 64비트 부동소수점 형식
숫자를 표현할 때 부호 비트, 지수, 가수부분으로 나누어서 숫자를 표현하기 때문에 오차가 발생할 수도 있음 (실수를 정확히 표현하지는 못함)
특별한 값 (Infinity, NaN)
// 숫자 타입의 세 가지 특별한 값 console.log(10 / 0); // Infinity console.log(10 / -0); // -Infinity console.log(1 * 'String'); // NaN var x = nan; // ReferenceError: nan is not defined // NaN 의 경우 대소문자를 구분하여 써주어야 하며 다르게 사용하였을 시, ReferenceError가 발생
JavaScript
복사

문자열 타입 ( ‘’, “”, `` )

변경 불가능한 값(문자열 생성 시 문자열 변경 X)
종류
' ' (작은 따옴표)
" " (큰 따옴표)
` ` (백틱, 템플릿 리터럴) - 키보드1 왼쪽에 있는 기호
위 값들은 묶여있다. 묶는 이유 : 키워드나 식별자 같은 토큰과 구분

템플릿 리터럴 (`멀티라인, ${}`)

ES6부터 도입된 문법
런타임에 일반 문자열로 변환되어 처리
멀티라인 문자열, 표현식 삽입을 할 때 사용
멀티라인 문자열
기존 따옴표(’ “) 이스케이프 \n과 같은 이스케이프 시퀀스를 사용해야 되는데 이를 사용하지 않고도 줄바꿈이 허용되며 모든 공백도 있는 그대로 적용
표현식 삽입
${variable} 형식으로 백 틱안에 있는 문자열 안에 변수를 넣어 주면 간단히 문자열에 넣어서 사용 가능

Boolean 타입 ( true & false )

true & false
참과 거짓, 각각 JS에서 1과 0을 반환

undefined 타입

var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화
변수에 값이 없다는 것을 알리고 싶을 때는 null을 사용

null 타입

변수에 값이 없다는 것을 의도적으로 명시하는 것
이 null을 할당하는 것은 더 이상 변수가 참조하던 값을 참조하지 않고, 참조를 제거하며, 메모리 공간에 가비지 컬렉션을 수행
HTML의 경우, querySelector 사용 시, 조건에 부합하는 요소가 없다면 null을 반환

선언과 정의

선언 : 다른 언어에선 선언은 식별자의 존재를 알리는 것,
정의 : 메모리 주소를 할당하는 것
자바스크립트는 변수를 선언하면 암묵적으로 정의가 이루어짐(var a; 라는 코드가 실행되면 undefined가 할당되는 것)
ECMASCript 사양
변수 : '선언한다'라고 표현
함수 : '정의한다'라고 표현

심볼 타입 ( Symbol() )

변경 불가능한 원시 타입의 값
다른 값과 중복 되지 않는 유일 무이한 값
심벌은 리터럴로 못 만들고 Symbol()함수를 사용
Symbol('값') // Symbol타입 사용 (Symbol()) + '' // -> TypeError: Cannot convert a Symbol value to a string
JavaScript
복사

심볼 테이블

컴파일러 또는 인터프리터는 심볼 테이블 이라고 부르는 자료 구조를 통해 식별자를 키(Key)로 바인딩된 값(Value)의 메모리 주소, 데이터 타입, 스코프 등을 관리

객체 타입 ( {}, [array] )

나머지 모든 타입
JS는 객체 기반 언어, JS를 이루는 거의 모든 것이 객체

데이터 타입의 필요성

값 저장 시, 확보해야 하는 메모리 공간의 크기 결정
값 참조 시, 읽어들어야 하는 메모리 공간 크기 결정
메모리에서 읽은 값을 어떻게 해석할 지 결정
데이터 타입에 의한 메모리 공간의 확보와 참조
데이터 타입에 따라 메모리 공간을 얼마나 잡고 읽어들어야 할지 확인하기 위해 (메모리 공간의 크기)

동적 타이핑

타입 언어
정적 : 데이터의 타입을 사전에 정의 (int, char 등의 키워드 이용)
동적 : 타입을 사전에 정의 X (JS : var, let, const)
JS는 변수의 선언이 아닌 할당에 의해 타입이 결정(타입 추론)된다. 선언시는 무조건 undefined
재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다.
var foo; console.log(typeof foo); // undefined foo = 3; console.log(typeof foo); // number foo = 'Hello'; console.log(typeof foo); // string foo = true; console.log(typeof foo); // boolean foo = null; console.log(typeof foo); // object foo = Symbol(); // 심벌 console.log(typeof foo); // symbol foo = {}; // 객체 console.log(typeof foo); // object foo = []; // 배열 console.log(typeof foo); // object foo = function () {}; // 함수 console.log(typeof foo); // function
JavaScript
복사
변수 : 타입X, 값 : 타입O. 현재 변수에 할당되어 있는 값에 의해 변수의 타입이 동적으로 결정

동적 타입 언어와 변수

동적 타입 언어의 구조적 단점
변화하는 변수 값을 추적하기 어렵고, 값을 확인하기 전에는 타입을 확신할 수 없다.
유연성은 높지만 신뢰성이 떨어진다.
동적 변수 사용 시 유의 사항
변수는 꼭 필요한 경우에 한해 사용
변수의 유효범위를 최대한 좁게하여 변수 부작용을 억제
전역변수는 최대한 사용 X
변수보다는 상수를 사용
변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍