[JS] Data Type(데이터 타입)

vSsongv·2021년 11월 22일
0

JS

목록 보기
4/40
post-thumbnail

Data Type : 값의 종류. JS의 모든 값은 데이터 타입을 갖는다. 데이터 타입은 값을 변경할 수 없는(immutable) 원시타입 8개와 값 변경이 가능한(mutable) 객체 타입 으로 분류할 수 있다.

  • 원시 값의 타입 변경은 재할당 외에 불가능.

✅ Number(숫자 타입)

  • 8byte
  • 64비트 부동소수점 형식을 따른다. 모든 수를 실수로 처리한다.
  • JS는 대소문자를 구별하기 때문에 NaN이 아닌 NAN, Nan은 식별자로 해석한다.

✅ BigInt(숫자 타입)

  • 임의 정밀도로 정수를 나타낼 수 있는 자바스크립트의 숫자 원시 형식이다.
  • BigInt를 사용하면 Number의 정수 한계를 넘어서는 큰 정수도 안전하게 저장 및 연산할 수 있다.
  • BigInt는 정수 끝에 n을 추가하거나 생성자를 호출하여 생성된다.

✅ String(문자열 타입)

  • 큰따옴표 " 또는 작은따옴표 '로 감싼다.
  • JS에서의 문자열은 원시 타입으로, 변경 불가능한 값이다.

✅ Template Literal(템플릿 리터럴)

  • ES6부터 도입된 문자열 표기법
  • ` 벡틱으로 감싼다.
  • 🔰 기존 문자열은 공백, 백스페이스, 개행 등을 나타내려면 이스케이프 시퀀스(\0, \b, \n 등)를 사용해야 했다.
  • 템플릿 리터럴 내에서는 이스케이프 시퀀스 없이 문자열을 있는 그대로 표현 가능하다.
var template = '<ul>\n\t<li>list<li>\n<ul>'
var template = '<ul>
	<li>list<li>
<ul>'
  • 🔰 템플릿 리터럴 내에서는 표현식 삽입을 통해 간단히 문자열을 삽입할 수 있다.
var last = "Jinyoung";
var first = "Song";

console.log(`My name is ${first} ${last}`);
  • 표현식 삽입은 반드시 템플릿 리터럴 내에서만 사용해야 한다.

✅ Boolean(불리언 타입)

  • 논리적 참과 거짓을 나타내는 true, false다.

✅ Undefined

  • var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화된다.
  • 변수 선언에 의해 확보된 메모리 공간을 빈 상태로 두지 않고 undefined로 초기화한다.
  • 변수에 값이 없음을 명시하고 싶다면 null을 할당해라.
  • 개발자가 의도적으로 할당하게 되면 취지와 어긋날 뿐더러 혼란을 가져올 수 있다.

✅ null

  • 값이 없음을 의도적으로 명시할 때 사용한다.
  • 이전에 할당되어 있던 값에 대한 참조를 제거한다.
  • 이전에 할당되어 있던 값에 대해 가비지 콜렉션이 일어난다.
  • 함수가 유효한 값을 반환할 수 없을 때에도 null을 반환한다.

✅ Symbol(심볼 타입)

  • ES6에서 추가된 변경 불가능한 원시 타입 값이다.
  • 다른 값과 중복되지 않는 유일무이한 값이다. -> 이름이 충돌할 위험이 없는 유일한 키를 만들기 위해 사용한다.)
  • Symbol 함수를 호출해 생성한다.
	var key = Symbol('key');

✅ 객체 타입

  • 위 타입을 제외한 모든 타입은 객체 타입이다.
  • list, map, set 등

❓ 데이터 타입의 필요성

1. 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
2. 값을 참조할 때 한번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해

  • 메모리 공간의 확보와 참조
    • 값을 저장할 때 데이터 타입에 따라 공간을 확보한다.
    • 값을 참조할 때 또한 데이터 타입에 따라 읽어 올 메모리 셀의 크기를 인식할 수 있다.

3. 메모리에서 읽어들인 2진수를 어떻게 해석할지 결정하기 위해

  • 데이터 타입에 의한 값의 해석
    • 읽어들인 2 진수를 데이터 타입에 맞추어 해석할 수 있다.
    • 0100 0001을 숫자로 해석하면 65지만 문자열로 해석하면 A이다.

❓ 동적 타이핑

  • JS는 변수를 선언할 때 타입을 선언하지 않는다.
  • 선언이 아닌 할당에 의해 타입이 결정되고, 언제든지 변경할 수 있다.
  • 이러한 특성 때문에 JS는 동적 타입 언어이다.
  • BUT 개발자의 의도와 상관없이 타입이 자동적으로 변화하기도 하므로, 유연성이 높지만 신뢰성이 떨어진다.
  • 개발자가 실수로 type을 변경한 경우 에러로 잡지 않으니 캐치할 방법이 없다.

    <주의할 점>

    1. 변수는 꼭 필요한 경우에 한해 제한적으로 사용하기. -> 개수가 많으면 오류가 발생할 가능성이 높다.
    2. 재할당 피하기
    3. 스코프를 최대한 좁게 -> 함수는 하나의 일만 하도록 하기!
    4. 전역변수는 최대한 지양
    5. 변수보다는 상수를 사용해 변화를 억제하기
    6. 변수 네이밍은 목적, 의미를 파악할 수 있도록 하기
    7. 반드시 초기화 해주기.

🔎 한눈에 보는 data type

구분타입설명
원시 타입Number정수,실수 구분 없이 숫자 타입만 존재.
``String문자열
``boolean논리적 값. (true / false)
``undefinedvar로 선언된 변수에 기본으로 할당되는 값.
``null값이 없다는 것을 의도적으로 명시할 때 사용
``symbolES6에서 추가된 타입.
객체 타입객체, 함수, 배열

<모던 자바스크립트 deepdive와, 추가 탐구한 내용을 정리한 포스트입니다.>

profile
wanna be bright person✨ Front-End developer

0개의 댓글