본문 바로가기
프로그래밍/자바스크립트 ES6

자바스크립트 ES6 #6 데이터 타입

by 참외롭다 2023. 4. 6.
반응형

#데이터타입 #원시타입  #객체타입 #템플릿리터럴 #숫자타입 #문자열타입 #undefined #null타입 #불리언타입 #symbol타입 #동적타입언어 #정적타입언어 #typeof #타입추론 #동적타이핑


 

데이터타입은 값의 종류를 말한다. 자바스크립트의 모든 값은 타입을 가진다.

 

자바스크립트는 총 7개의 데이터 타입을 제공한다. 데이터 타입은 크게 원시타입(Primative)객체타입(Object) 으로 분류할 수 있다.

 

원시타입

 

- 숫자 : 정수, 실수 구분없이 숫자는 하나의 타입만 존재

- 문자열 : 문자열

- 불리언 : 논리적 참(true) 과 거짓(true)

- undefined : var 키워드로 선언된 변수에 암묵적으로 할당되는 값

- null : 값이 없다는 것을 명시적으로 선언할때 사용하는 값

- Symbol : ES6에서 추가된 7번째 타입

 

객체타입

 

- object : 객체, 함수, 배열 등

 


 

숫자타입은 숫자 데이터를 표현하기위해 사용한다.

 

- 64비트 부동소수점 형식을 따르고 모든 수는 실수로 처리해 Integer과 같은 정수 타입은 존재하지 않는다.

 

// 모두 실수로 처리하기 때문에 같다
console.log(1.0 === 1); //true달
console.log(4 / 2); // 2(실수)
console.log(3 / 2); // 1.5(실수)
// 자바스크립트만의 특별한 수 표현
console.log(10 / 0); // Infinity(양의 무한대)
console.log(10 / -0); // -Infinity(음의 무한대)
console.log(1 * "string"); // NaN (Not a Number)

 

문자열타입은 텍스트 데이터를 표현하기위해 사용한다.

 

- 문자열이란 0개 이상의 16비트 유니코드 문자(UTF-16)의 집합을 말한다.

 

- 자바스크립트 엔진은 작은 따옴표, 큰 따옴표, 백틱(``)안의 데이터를 문자열 타입으로 판단된다.

 

- 자바스크립트에서 문자열은 원시타입이며 변경 불가능한 값으로 평가된다

 

- 자바스크립트는 ES6부터 ``(백틱)을 활용한 템플릿리터럴을 제공한다. 이를 통해 멀티라인 문자얼, 표현식 삽입, Taged Template 과 같은 문자열 처리기능을 사용할 수 있다.

 

// 멀티라인 문자열
const multiLineTemplate = `
  <ul>
    <li><src href='#'>HOME</li>
  </ul>
`;

// 표현식 삽입
const first = "fist";
const second = "second";
console.log(`My name is ${first} and ${second}`);

 

불리언 타입은 논리적인 참과 거짓을 표현하기 위해 사용한다.

 

undefined타입은 var 키워드로 선언된 변수는 암묵적인 초기값 이다.

 

- 선언만 하고 할당하지않은 변수를 참조하면 undefined 값이 반환된다.

-  undefiend 타입은 주로 엔진이 암묵적으로 할당하는 값이기때문에 의도적인 사용은 권장되지 않는다.

- 변수에 값이 없다는 것을 의도적으로 표현하기위해선 NULL 타입 의 사용이 권장된다.

 

null타입은 변수에 값이 없다는 것을 의도적으로 명시하기 위해 사용된다.

 

- 변수에 null을 할당하는 것은 변수가 이전에 참조하던 값을 더이상 참조하지 않겠다는 의미로 null 값이 할당된 변수는 가비지 콜렉션 대상이 된다.

 

symbol타입은 ES6에서 추가된 타입으로 변경 불가능한 원시 값이다.

 

- 다른 값과 중복되지않는 유일무이한 값으로  이름이 출돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용된다.

- 심벌 이외의 데이터 값은 리터럴을 이용해 생성하지만 심벌 타임은 함수를 통해 생성한다는 특징이 있다.

 

var key = Symbol("key");
console.log(typeof key); // symbol

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

 

상기 6가지 원시타입의 값을 제외하고 자바스크립트를 이루고 있는 모든 것은 객체타입 이다.

 


 

데이터 타입의 필요성

 

자바스크립트 엔진은 데이터 타입에 따라 메모리공간을 확보하고 참조한다. 

 

값을 효율적으로 데이터 공간에 저장하기 위해선 데이터 공간 확보를 위해 필요한 메모리 공간의 크기를 알아야한다.

 

자바스크립트 엔진은 데이터 타입을 통해 확보해야할 메모리공간의 크기를 알 수 있다.

 

// 런타임에 엔진은 리터럴 100 을 숫자로 판단하고 8바이트의 메모리공간을 확보한다.
// 그리고 숫자값 100을 2진수로 메모리에 저장한다.
var score = 100;

// 값을 참조할때 변수에 숫자타입의 값이 할당되어있으므로 엔진은 8바이트 단위로 값을 읽어들인다.
score;

 

자바스크립트 엔진은 데이터 타입을 통해 값을 해석한다.

모든 값은 메모리에 2진수로 저장되는데. 데이터 타입이 있어야 어떤 타입의 값으로 해석해야할지 알 수 있다.

 

자바스크립트는 동적 타입 언어다.

 

- 자바스크립트의 변수는 선언시 타입을 선언 하지 않기에 어떤 값이라도 변수에 할당할 수 있다.

 

- typeof 명령어를 통해  변수의 할당된 데이터의 타입을 확인할 수 있습다.

 

- 자바스크립트의 변수는 선언이 아닌 값의 할당에 의해 변수의 타입이 결정됩니다. 이를 값에 의한 타입추론 이라고한다.

 

- 자바스크립트의 변수는 재할당에 의해 변수의 타입은 언제든지 동적으로 변경될 수 있습니다. 이를 동적타이핑 이라고한다.

 

정적타입언어의 특징은 다음과 같다.

 

- 정적 타입 언어는 변수의 타입을 변경할 수 없으며, 변수에 선언한 타입에 맞는 값만 할당할 수 있다.

 

- 정적 타입 언어는 컴파일 시점에 타입 체크를 수행한다.

 

- 타입체크를 통과하지 못했다면 에러를 발생시켜 프로그램의 실행을 막는다. 이는 안정적인 코드 구현을 유도해 런타임 시점의 에러를 줄이기 위함이다.

 


동적타입언어의 문제점과 최적화방안

 

- 동적타입언어의 변수는 값에 의해 변수의 타입이 언제든 변경될 수 있다. 이에 유연성은 높지만 신뢰성은 떨어진다.

 

- 변수는 꼭 필요한 경우에 한해 제한적으로 사용해야하고 변수의 유효범위(스코프)는 최대한 좁게 만들어 값의 변화에 의한 부작용을 최소화해야한다.

 

- 전역 변수는 의도치 않게 값이 변경될 가능성이 높기때문에 사용하지 않는 것이 좋다.

 

- 변수보다는 상수의 사용을 통해 값의 변경을 억제해야합니다. 

반응형