Home 06 - 데이터 타입
Post
Cancel

06 - 데이터 타입

데이터 타입data type

 : 값의 종류.
JS에서 모든 값은 데이터 타입을 가짐.
ES6 기준 7개의 데이터 타입 제공.

구분데이터 타입설명
원시 타입숫자number 타입숫자
문자열string 타입문자열
hihihihihi
hihihihihi
hihihihihi
hihihihihi
객체 타입객체, 함수, 배열 등


1. 숫자 타입

JS에선 하나의 숫자 타입만 존재.
숫자 타입의 값은 배정밀도 64비트 부동소수점 형식double-precision 64-bit format.
즉, 모든 수를 실수로 처리.

1
2
3
4
5
6
7
8
9
10
var binary = 0b10010010;
var octal = 0o134;
var hex = 0x92;

console.log("10진수 92의");
console.log(" 2진수는 ", binary);
console.log(" 8진수는 ", octal);
console.log(" 16진수는 ", hex);
console.log("2진수와 8진수는 서로 같다? \n => ", binary === octal);
console.log("8진수와 16진수는 서로 같다? \n => ", octal === hex);
1
2
3
4
5
6
7
8
9
10
11
12
13
10진수 92의
declaring_values.js:5
 2진수는  146
declaring_values.js:6
 8진수는  92
declaring_values.js:7
 16진수는  146
declaring_values.js:8
2진수와 8진수는 서로 같다? 
 =>  false
declaring_values.js:9
8진수와 16진수는 서로 같다? 
 =>  false

모든 수를 실수로 처리하므로,
정수로 표시되는 수끼리 나누어도 실수가 나올 수 있음.

1
console.log("1 and 1.0 is... same?\n => ", 1 === 1.0);
1
2
1 and 1.0 is... same?
 =>  true

2. 문자열 타입

0개 이상의 16비트 유니코드 문자(UTF-8)의 집합.

문자열은 작은따옴표single quote(''), 큰따옴표double quotes(""), 백틱backtick(` `)으로 감싼다.
(JS에선 작은따옴표가 일반적)

3. 템플릿 리터럴template literal

ES6부터 도입된 새로운 문자열 표기법.
멀티라인 문자열multi-line string, 표현식 삽입expression interpolation, 태그드 템플릿tagged template 등의 문자열 처리 기능 제공.

템플릿 리터럴은 백틱(` `)을 사용하여 표현.

  3.1. 멀티라인 문자열

★비교
    일반 문자열 내에선 개행 허용 X
    대신에, 이스케이프 시퀀스escape sequence 사용해야 함.
BUT,
    템플릿 리터럴에선
    이스케이프 시퀀스 없이도 줄바꿈 허용, 모든 공백도 그대로 적용.

3.2. 표현식 삽입

문자열은 문자열 연산자 +로 연결 가능.
(피연산자 中 하나 이상이 문자열이면 문자열 연결 연산자로 동작)

1
2
3
4
5
var first = 'Thurs';

var last = 'day';

console.log('Today is ' + first + last);
1
Today is Thursday

템플릿 리터럴에선 표현식 삽입expression interpolation으로 간단히 문자열 삽입 가능.

1
2
3
4
var first = 'Thurs';
var last = 'day';

console.log(`Today is ${first}${last}`);
1
Today is Thursday

표현식 삽입하기 위해선 ${ }으로 해당 표현식을 감싸기.
이때, 문자열이 아니더라도 문자열로 타입이 강제로 변환됨.

4. 불리언 타입

true, false

5. undefined 타입

undefined가 유일.

var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화됨.
즉, 변수 선언 이후에 값 할당하지 않은 변수 참조 시 undefined 반환됨.

변수에 값 없다는 걸 명시할 때는?
=> null 할당.

6. null 타입

null이 유일

null, Null, NULL

JS에서는 대소문자 구별하므로 셋은 서로 다르다.
null은 변수에 값 없다는 걸 의도적으로 명시(의도적 부재intentional absence)할 때 사용.

7. 심벌 타입symbol

ES6에서 추가된 7번째 타입.
변경 불가능한 원시 타입의 값.

심벌 값은 다른 값과 중복 않는 유일무이한 값이므로,
주로 이름 충돌 위험이 없는 객체의 유일한 프로퍼티 키 만들기 위해 사용됨.

8. 객체 타입

원시 타입과 객체 타입은 근본적으로 다르다.

9. 데이터 타입의 필요성

데이터 타입은 값의 종류를 말함.

필요한 이유
 - 값 저장할 때 확보해야 하는 메모리 공간의 크기 결정하기 위해
 - 값 참조할 때 한 번에 읽어들어야 할 메모리 공간의 크기 결정하기 위해
 - 메모리에서 읽어들인 2진수를 어떻게 해석할지 결정하기 위해

10. 동적 타이핑

JS의 변수는 선언이 아닌 할당에 의해 타입이 결정(타입 추론type inference)됨.
또한, 변수의 타입은 재할당에 의해 언제든지 동적으로 변할 수 있음.(동적 타이핑dynamic typing)

동적 타입 언어dynamic/weak type인 JS에선
어떤 데이터 타입의 값이라도 자유롭게 할당 가능.
=> 유연성flexibility은 높지만, 신뢰성reliability은 떨어짐.

★ 주의사항
 - 변수는 꼭 필요한 경우에 한해 제한적 사용하기.
    필요한 만큼 최소한으로 유지하기.

 - 변수의 유효 범위(스코프)는 최대한 좁게 만들기.(=> 부작용 억제)

 - 전역 변수는 최대한 사용하지 않기

 - 변수보다는 상수 사용하여 값 변경 억제하기

 - 변수 이름은 변수 목적이나 의미 파악 가능하도록 네이밍하기. 식별자도 마찬가지.

Contents