JS DeepDive 06장 데이터 타입

한칙촉·2024년 1월 17일

숫자 타입

  • 배정밀도 64비트 부동소수점 형식 → 모든 수를 실수로 처리
  • 2진수, 8진수, 16진수를 값으로 참조하면 모두 10진수로 해석
  • 정수로 표현되어도 사실은 실수
console.log(1 === 1.0); // 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
  • 양의 무한대, 음의 무한대, NaN 표현 가능
  • 대소문자를 구별하므로 NAN, Nan, nan은 식별자로 해석

문자열 타입

  • 문자열 = 0개 이상의 16비트 유니코드 문자의 집합
  • 작은따옴표, 큰따옴표, 백틱으로 텍스트를 감쌈
    → 키워드나 식별자 같은 토큰과 구분하기 위함
var string;

string = '작은따옴표로 감싼 문자열 내의 "큰따옴표"는 문자열로 인식됨';
string = "큰따옴표로 감싼 문자열 내의 '작은따옴표'는 문자열로 인식됨";

템플릿 리터럴

  • 멀티라인 문자열, 표현식 삽입, 태그드 템플릿 등 편리한 문자열 처리 기능 제공
  • 일반적인 따옴표 대신 백틱을 사용해 표현

멀티라인 문자열

: 일반 문자열 내에서는 줄바꿈(개행)이 허용되지 않기 때문에 백슬래시()로 시작하는 이스케이프 시퀀스를 사용해야 함

var template = `<ul>\n\t<li><a href="#">Home</a></li>\n</ul>`;
console.log(template);

// 결과
<ul>
  <li><a href="#">Home</a></li>
</ul>

템플릿 리터럴 내에서는 이스케이프 시퀀스를 사용하지 않고도 줄바꿈이 허용되며, 모든 공백도 있는 그대로 적용됨

표현식 삽입

문자열은 문자열 연산자 +를 사용해 연결이 가능하지만, 템플릿 리터럴 내에서는 표현식 삽입을 통해 간단한 문자열 삽입이 가능

var first = 'Ung-mo';
var last = 'Lee';

// 문자열 연결
console.log('My name is ' + first + ' ' + last + '.');
// 표현식 삽입
console.log(`My name is ${first} ${last}.`);
  • 표현식을 삽입하려면 ${ }로 표현식을 감쌈
  • 표현식의 평가 결과가 문자열이 아니더라도 문자열로 타입이 강제 변환되어 삽입됨

불리언 타입

: 논리적 참, 거짓을 나타내는 true, false


undefined 타입

  • 변수를 참조했을 때 undefined가 반환됨
    → 선언 이후 값이 할당된 적이 없는, 즉 초기화되지 않은 변수
var foo;
console.log(foo); // undefined

null 타입

: 변수에 값이 없다는 것을 의도적으로 명시할 때 사용

  • 변수가 이전에 참조하던 값을 더이상 참조하지 않겠다는 의미
    = 이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거
  • 함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 함
    ex. HTML 요소를 검색해 반환하는 document.querySelector 메서드

심벌 타입

: 변경 불가능한 원시 타입의 값

  • 다른 값과 중복되지 않는 유일무이한 값
  • 주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용
  • Symbol 함수를 호출해 생성
// 심벌 값 생성
var key = Symbol('key');
console.log(typeof key); // symbol

// 객체 생성
var obj;

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

객체 타입

  • 자바스크립트 = 객체 기반의 언어
  • 자바스크립트를 이루고 있는 거의 모든 것이 객체

데이터 타입의 필요성

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

동적 타이핑

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

  • 정적 타입 언어 = 변수를 선언할 때 데이터 타입을 사전에 선언해야함
    = 명시적 타입 선언 → 컴파일 시점에 타입 체크를 수행
  • 자바스크립트의 변수 = 선언이 아닌 할당에 의해 타입이 결정됨
  • 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있음 (동적 타이핑)
    → 자바스크립트는 동적 타입 언어

변수 사용 시 주의사항

  1. 꼭 필요한 경우에 한해 제한적으로 사용
  2. 유효 범위(스코프)는 최대한 좁게 만들어 변수의 부작용 억제
  3. 전역 변수는 최대한 사용 X
  4. 변수보다는 상수를 사용해 값의 변경을 억제
  5. 변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍
profile
빙글빙글돌아가는..

0개의 댓글