[Javascript] 데이터 타입

개발새발🦶·2022년 9월 29일
0
post-thumbnail

데이터 타입

데이터 타입은 값의 종류를 말한다. 자바스크립트의 모든 값은 데이터 타입을 갖는다. ES6기준 7개의 데이터 타입을 갖는다.

📌 원시타입

  • 숫자타입 - 숫자. 정수와 실수 구분없이 하나의 숫자 타입
  • 문자열 타입 - 문자
  • 불리언 타입 - true / false
  • undefined 타입 - 변수에 암묵적으로 할당되는 값
  • null 타입 - 값이 없는 것을 의도적으로 명시할 때 사용
  • 심벌 타입 - ES6에서 추가된 7번째 타입

📌 객체 타입

  • 객체, 함수, 배열 등

문자열과 숫자타입은 같아 보이지만 다르다. 숫자는 연산을 위해 생성하지만, 문자는 텍스트를 화면에 출력하기 위한 용도로 사용되고 메모리에 저장되는 공간크기, 2진수도 다르게 들어간다.

📌 숫자타입

모든 수를 실수로 처리하며, 정수만 표현하기 위한 데이터 타입이 따로 존재하지 않는다. 정수로 표시된다고 해도 사실은 실수를 의미한다. 정수로 표시되는 수끼리 나누더라도 실수로 표시된다.

console.log(1 === 1.0); //true

숫자 타입은 3가지 특별한 값도 표현할 수 있다.

  • Infinity : 양의 무한대
  • -Infinity : 음의 무한대
  • NaN : 산술 연산 불가 > 대소문자를 구별하기 때문에 Nan,NAN 등의 표현은 에러가 발생한다. 값이 아닌 식별자로 해석.
console.log(10 / 0);  //Infinity
console.log(10 / -0); //-Infinity
console.log(1 * 'String');  //NaN

📌 문자열 타입

문자열타입은 텍스트 데이터를 나타내는데 사용한다. 0개 이상의 16비트 유니코드 문자의 집합이며, 전세계 문자를 표현할 수 있다.

  • 문자열은 '', "", `` 으로 텍스트를 감싼다. > 키워드나 식별자 같은 토큰과 구분하기 위해서
  • 원시타입이며 변경 불가능한 값이다. 문자열이 생성되면 변경할 수 없다.
  • 따옴표로 감싸면 공백을 포함시킬 수 있다.

템플릿 리터럴
ES6부터 새로운 문자열 표기법이 도입되었다. 멀티라인 문자열, 표현식 삽입, 테그드 템플릿 등 편리한 문자열 처리 기능을 제공한다. 백틱을 사용해 표현한다.

일반 문자열과 달리 템플릿 리터럴 내에서는 이스케이프 시퀀스를 사용하지 않고도 줄바꿈이 허용되며, 모든 공백도 있는 그대로 적용된다.

ex)

let template = `<ul>
  <li></li>
</ul>`;
console.log(template); 
//<ul>
//  <li></li>
//</ul>

멀티라인 문자열

  • 일반 문자열 내에서는 줄바꿈이 허용되지 않는다.
  • 줄바꿈 등의 공백을 표현하기 위해서는 이스케이프 시퀀스를 사용해야 한다.(\n, \, \t등등)
let template = `Template Literal`;
console.log(template); //Template Literal

표현식 삽입

  • 문자열 연산자 +를 사용하여 연결할 수 있다.
  • 하나 이상의 문자열일 경우 문자열 연결 연산자로 동작한다.
let first = 'mo';
let last = 'li'
console.log('My name is' +first+' ' +last+'.');

템플릿 리터럴 내에서는 표현식 삽입을 통해 간단하게 문자열을 삽입할 수 있다. ${}로 표현식을 삽입하는데, 문자열이 아니더라도 문자열로 타입이 강제로 변환되어 삽입된다.

  • 표현식 삽입은 반드시 템플릿 리터럴 내에서 사용해야 한다.
  • 일반 문자열에서는 문자열로 취급한다.

ex)

let first = 'mo';
let last = 'li'
console.log(`My name is {first} {$last}.`); 

📌 불리언 타입

불리언은 논리적인 참, 거짓을 나타내는 true와 false만 있다.
참과 거짓으로 구분되는 조건에 의해 프로그램 흐름을 제어하는 조건문에서 자주 쓰인다.

📌 undefined 타입

undefined 타입의 값은 undefined가 유일하다. 선언된 변수는 암묵적으로 undefined로 초기화 된다. 확보된 메모리 공간을 할당이 이뤄질 때까지 빈 상태(undefined)이다.

  • 변수에 값이 없다는 것을 명시하고 싶을 때는 null을 할당하는 것이 좋다.

📌 null 타입

null 타입의 값은 null이 유일하다. 대소문자를 구분하기 때문에 Null, NULL 등은 다르다. 프로그래밍에서 null은 변수에 값이 없다는 것을 의도적으로 명시하고 싶을 때 사용한다.

  • 함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 한다.

📌 심벌 타입

심벌은 ES6에서 추가된 7번째 타입으로, 변경 불가능한 원시 타입 값이다. 심벌 값은 다른 값과 중복되지 않은 유일무이한 값이다.

  • 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용한다.
  • 심벌 이외의 원시값은 리터럴을 통해 생성하지만, 심벌은 함수를 호출해 생성한다.
  • 외부에 노출되지 않으며, 다른 값과 중복되지 않는다.

ex)

let key = Symbol('key');
console.log(typeof key); //symbol

let obj = {};

//이름이 충돌 위험이 없는 유일무이한 값인 심벌을 프로퍼티 키로 사용.
obj[key] = 'value';
console.log(obj[key]);

📌 데이터 타입의 필요성

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

📌 동적 타이핑

자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정된다. 그리고 재할당에 의해 변수의 타입은 언제든 동적으로 변할 수 있다. 이러한 특징들을 동적 타이핑이라 하며, 자바스크립트는 동적 타입 언어이다.

하지만, 이러한 변수의 값으로 타입이 정해지는 동적 타입은 양날의 검이다. 편리하지만 변수의 값은 언제든지 변경될 수 있기 때문에 값을 확인하기 전까지 타입을 확신할 수 없다. 때문에 안정적인 프로그램을 만들기 위해서 변수를 사용할 때 주의사항이 필요하다.

  • 꼭 필요한 경우에 제한적으로 사용한다.
  • 변수의 유효범위는 최대한 좁게 만들어야 한다.
  • 전역 변수는 최대한 사용하지 않는다. 언제든 참조/변경 가능한 전역 변수는 의도치 않게 값이 변경되는 경우가 많기 때문.
  • 변수보다는 상수를 사용해 값의 변경을 억제한다.
  • 변수 이름은 목적이나 의미파악을 위해 적절한 네이밍을 한다.
profile
발로하는 코딩 정리기

0개의 댓글