늘보블로그
데이터타입 본문
자바스크립트의 데이터 타입
- 데이터 타입: 값의 종류. 자바스크립트의 모든 값은 데이터 타입을 가짐.
- 원시 타입: 숫자, 문자열, 불리언, undefined, null, 심벌 타입
- 객체 타입: 객체, 함수, 배열 등
1. 숫자 타입
- C, 자바 등과 달리 자바스크립트는 하나의 숫자 타입만 존재함.
- 모든 수는 실수로 처리함. 정수만 표현하기 위한 타입 X
- 정수로 표시되도 실제로는 실수임을 의미. -> 정수로 표시되는 수끼리 나누더라도 실수가 나올 수 있음. (ex:
console.log(3/2); // 1.5
)
- 정수로 표시되도 실제로는 실수임을 의미. -> 정수로 표시되는 수끼리 나누더라도 실수가 나올 수 있음. (ex:
- 2진수, 8진수, 16진수를 표현하기 위한 타입이 없으므로 모든 수는 참조 시 10진수로 해석됨
var binary = 0b01000001;
var octal = 0o101;
var hex = 0x41;
console.log(binary, octal, hex); // 65, 65, 65
console.log(binary === octal, octal === hex); // true, true
- 추가적으로 Infinity(양의 무한대), -Infinity(음의 무한대), NaN(산술 연산 불가)라는 값을 표현할 수 있음. (ex:
console.log(10/0, 10/-0, 1*'String'); // Infinity, -Infinity, NaN
)
2. 문자열 타입
- 텍스트 데이터를 나타내는 데 사용. 0개 이상의 16비트 유니코드 문자(UTF-16)의 집합
- 작은따옴표, 큰따옴표, 백틱으로 텍스트를 감싸서 표현 가능함
- 키워드나 식별자 같은 토큰과 구분하기 위해서 따옴표로 감싸야 함
- 공백 문자를 사용하기 위해
- 변경 불가능한 값immutable value
- 템플릿 리터럴: 문자열 처리 기능의 확장을 위해 ES6부터 도입. 백틱을 사용해 표현.
- 멀티라인 문자열: 기존에는 이스케이프 시퀀스를 사용 -> 엔터로 줄바꿈(개행) 가능
- 표현식 삽입: 연결 연산자 +로 문자열과 표현식 연결 -> ${표현식}. 표현식의 평가 값이 문자열이 아닐 경우 타입 강제 변환됨
3. 불리언 타입
- true(논리적 참), false(논리적 거짓)이 포함됨
- 프로그램 흐름을 제어하는 조건문에서 주로 사용
4. undefined 타입
- undefined가 해당됨
- var, let 키워드로 변수 선언 시 자바스크립트 엔진이 undefined로 암묵적 초기화 진행함. -> 값의 할당 여부를 판단할 수 있음
5. null 타입
- null이 해당됨
- 프로그래밍 언어에서 null은 변수에 값이 없다는 것을 의도적으로 명시(의도적 부재)할 때 사용
- null을 할당하는 것은 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미.
- 참조가 제거된 값은 가비지 콜렉션이 수행됨
- 함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환함(ex: document.querySelector 메서드에서 존재하지 않는 클래스명을 작성했을 때)
6. 심벌 타입
- 다른 값과 중복되지 않는 유일한 값. 변경 불가능함.
- 주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용
- Symbol 함수를 호출해 생성(리터럴 X)
- 생성된 심벌 값은 외부에 노출되지 않음.
7. 객체 타입
(예정)
8. 타입의 필요성
- 데이터 타입에 의한 메모리 공간의 확보와 참조
- 자바스크립트 엔진은 값의 타입에 따라 정해진 크기의 메모리 공간을 확보함.
- 참조 시 타입에 따라 한 번에 읽어야 할 메모리 공간의 크기(메모리 셀의 개수, 바이트 수)가 정해짐
- 데이터 타입에 의한 값의 해석
- 2진수 형태이므로 타입에 따라 해석이 달라짐
9. 동적 타이핑
- 정적 타입 언어: C, 자바와 같이 변수에 할당할 데이터 타입을 사전에 선언해야 하는 언어. 이러한 사전 선언을 명시적 타입 선언이라고 함
- 정적 타입 언어는 컴파일 시점에 타입 체크를 시행. 타입 체크를 통과하지 못하면 에러가 발생하고 프로그램이 실행되지 않음
- 동적 타입 언어: 자바스크립트, 파이썬 등은 값을 할당하는 시점에 변수의 타입이 동적으로 결정됨(동적 타이핑). 재할당도 가능.
- 타입 추론: 값의 할당에 의해 타입이 결정되는 것
- 자바스크립트 엔진은 이 때문에 암묵적 타입 변환이 가능함. -> 유연성 높으나 신뢰성 낮음
- 변수 사용 시 주의사항
- 변수는 꼭 필요한 경우에만 한정적으로 사용
- 유효 범위(스코프)는 최대한 좁게 만들어 부작용을 억제
- 전역 변수는 가능한 배제
- 변수보다는 상수
- 변수 네이밍은 목적이나 의미에 맞게 할 것
- 변수 사용 시 주의사항