06장 데이터 타입

이로그·2023년 10월 29일
0

06장 데이터 타입

  • 자바스크립트는 7개의 데이터 타입을 제공하고, 원시타입과 객체타입으로 분류된다.
  • 원시타입(변경 불가능한 값) : 숫자타입(숫자), 문자열타입(문자열), 불리언타입(true, false), undefined타입(undefined), null타입(null), 심벌타입
  • 객체타입 : 객체, 함수, 배열...

6.1 숫자타입

  • 자바스크립트는 하나의 숫자타입만 존재함
  • 배정밀도 64비트 부동소수점 형식을 따르며 모든 수를 실수로 처리한다.
var integer = 10; // 정수
var double = 10.12; // 실수
var negative = -20; // 음의 정수
  • 2진수, 8진수, 16진수를 표현하기 위한 데이터 타입을 제공하지 않기 때문에 참조시 모두 10진수로 해성된다.
var binary = 0b01000001;
var octal = 0o101;
var hex = 0x41;
console.log(binary, octal, hex); // 65 65 65
  • 숫자 타입은 모두 실수로 처리된다.
console.log(1 === 1.0); // true

<숫자 타입의 특별한 3가지 값>

// 1. Infinity : 양의 무한대
console.log(10/0);
// 2. -Infinity : 음의 무한대
console.log(10/-0);
// 3. NaN : 산술 연산 불가
console.log(1 * 'String');

6.2 문자열 타입

  • 문자열 타입 : 텍스트 데이터를 나타내는데 사용
  • 작은따옴표(''), 큰따옴표(""), 백틱(``)으로 텍스트를 감싼다.
  • 문자열은 원시타입이며, 변경 불가능한 값이므로 문자열이 생성이 되면 변경할 수 없다.
var string;
string = '문자열';
string = "문자열";
string = `문자열`;

6.3 템플릿 리터럴

  • 템플릿 리터럴 : ES6부터 도입. 멀티라인 문자열, 표현식 삽입, 태그드 템플릿 등 편리한 문자열 처리 기능을 제공. 백틱(``)을 사용하여 표현.
  • 런타임에 일반 문자열로 반환되어 처리됨.
var template = `Template literal`;
console.log(template);

6.3.1 멀티라인 문자열

  • 일반 문자열 내에서는 줄바꿈(개행)이 허용되지 않음.
var str = 'Hello
world.'; // SyntaxError
  • 일반 문자열내에서 줄바꿈 등의 공백을 표현하려면 백슬래시()로 시작하는 이스케이프 시퀀스를 사용해야함.
// 일반 문자열
var template = '<ul>\n\t<li><a href="#">Home</a></li>\n</ul>';
// 템플릿 리터럴
var template = `<ul>
	<li><a href="#">Home</a></li>
</ul>`;

6.3.2 표현식 삽입

  • 문자열은 + 연산자를 사용하면 연결을 할 수 있는데 ${}를 이용하면 더 간편하게 사용 할 수 있다.
  • 가독성이 훨씬 좋다. 반드시 백틱과 함께 사용 해야 한다.
var first = 'Ung-mo';
var last = 'Lee';
// ES5 문자열 연결
console.log('My name is ' + first + ' ' + last + '.'); // My name is Ung-mo Lee.
// ES6 문자열 연결
console.log(`My name is ${first} ${last}.`); // My name is Ung-mo Lee.

6.4 불리언 타입

  • 논리적 참, 거짓을 타나내는 true와 false가 있다.
var foo = true;
console.log(foo); // true
foo = false;
console.log(foo); // false

6.5 undefined 타입

  • var 키워드로 선언한 변수를 자바스크립트가 암묵적으로 undefined로 초기화 해준다.
  • 변수에 값이 없다는 것을 명시하고 싶을 때는 undefined가 아니라 null을 사용하는 것이 올바르다.

6.6 null 타입

  • 변수에 값이 없다는 것을 의도적으로 명시할 때 사용
  • 변수가 이전에 참조하던 값을 더이상 참조하지 않겠다는 의미로 사용
var foo = 'Lee';
foo = null;
console.log(foo); // null
  • 함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 한다
console.log(document.querySelector('.myClass'); //null

6.7 심벌 타입

  • ES6에서 추가된 7번째 타입
  • 심벌 값은 다른 값과 중복 되지 않는 유일무이한 값
  • 객체의 유일한 프로퍼티 키를 만들기 위해 사용.
  • 심벌은 다른 원시값과 다르게 Symbol 함수를 호출해 생성함.
var key = Symbol('key');
console.log(typeof key); // symbol

var obj = {};
obj[key] = 'value';
console.log(obj[key]); // value

6.8 객체 타입

  • 자바스크립트를 이루고 있는 모든 것이 객체이다.
  • 6가지 데이터 타입 이외의 값은 모두 객체 타입이다.

6.9 데이터 타입의 필요성

데이터 타입이 필요한 이유는,

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

6.10 동적 타이밍

6.10.1 동적 타입 언어와 정적 타입 언어

  • 자바스크립트는 C나 JAVA와 다르게 변수 선언시 타입을 선언하지 않는다.
  • 그렇기 때문에 어떠한 데이터든 자유롭게 할당할 수 있다.
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.lo(typeof foo); // function
  • 자바스크립트는 값을 할당하는 시점에 변수의 타입이 동적으로 결정되고 재할당에 의해 언제든 동적으로 변할 수 있다.

6.10.2 동적 타입 언어와 변수

  • 자바스크립트는 개발자의 의도와 상관없이 자바스크립트 엔진에 의해 암묵적으로 타입이 자동으로 반환되기도 한다. 그렇기 때문에 변화하는 변수값을 추적하기 어려울 수 있다.

변수 사용시 주의사항

  • 변수는 꼭 필요한 경우에 제한적으로 사용한다.
  • 변수의 유효 범위(스코프)는 최대한 좁게 만든다.
  • 전역 변수는 최대한 사용하지 않는다.
  • 변수보다는 상수를 사용해 값의 변경을 억제한다.
  • 변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍한다.

0개의 댓글