[6장] 데이터 타입

Sheryl Yun·2022년 6월 6일
0
post-thumbnail

데이터 타입

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

자바스크립트는 7개의 데이터 타입을 제공한다.
7개의 데이터 타입은 원시 타입객체 타입으로 분류된다.

원시 타입

변경 불가능한 값 (immutable value) - 한 번 생성되면 변경 불가

  • 숫자 타입 (number) - 정수/실수 구분없이 실수 타입만 존재
  • 문자열 타입 (string)
  • 불리언 타입 (boolean)
  • undefined 타입 (undefined) - 선언 단계에서 var 변수에 암묵적으로 할당되어 초기화시키는 값
  • null 타입 (null) - 값이 없음을 개발자가 의도적으로 명시할 때 사용하는 값
  • 심벌 타입 (symbol) - ES6에서 추가된 7번째 타입

객체 타입

변경 가능한 값 (mutable value) - 생성 이후에도 변경 가능

  • 객체, 함수, 배열 등

NaN이란?
산술 연산 불가(not-a-number)
예를 들어 1 * 'String' 을 연산하면 문자열은 산술연산이 불가능하므로 NaN 값이 나온다.

템플릿 리터럴

  • 백틱(``)을 사용하여 표현
  • 이스케이프 문자 없이도 줄바꿈 및 공백 그대로 적용
  • ${ }로 표현식(변수) 삽입 가능 ('+' 연산자 필요 없음)

Symbol 타입

  • 숫자, 문자열처럼 변경 불가능한 원시 타입
  • 다른 값과 중복되지 않는 유일무이한 값
    => 주로 객체의 유일한 프로퍼티 키를 만들기 위해 사용
  • Symbol 함수를 호출하여 생성
    => 이렇게 생성된 심벌값은 외부에 노출되지 않으며(private) 다른 값과 절대 중복되지 않는다.
// 심벌 값 생성
var key = Symbol('key');
console.log(typeof key); // symbol

// 객체 생성
var obj = {};

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

객체 타입

자바스크립트는 객체 기반의 언어
=> 자바스크립트를 이루고 있는 거의 모든 것이 객체이다.
(원시 타입 외에는 모두 객체 타입)

데이터 타입의 필요성

데이터 타입이 필요한 이유는 다음과 같다.
1. 값을 저장할 때 확보해야 할 메모리의 공간이 다르기 때문이다.
타입에 맞는 공간을 할당해야 메모리 낭비 또는 값의 손실 없이 값을 저장할 수 있다.
2. 값을 읽어들일 때 필요한 메모리의 공간이 다르기 때문이다.
2. 값을 해석할 때의 결과가 달라지기 때문이다.
예를 들어 메모리에 저장된 값 0100 0001을
number로 해석하면 숫자 65이지만, string으로 해석하면 문자 'A'이다.

동적 타이핑

정적 타입 언어

  • C, 자바, 코틀린 등
  • 변수 선언 단계에서 타입 설정
    char c;
    int num;
  • 선언 후 변수의 타입을 변경할 수 없으며, 선언한 타입에 맞는 값만 할당 가능
  • 런타임 이전의 컴파일 시점에 타입 체크 수행 (타입에 맞는 값을 할당했는지)
    => 타입 체크를 통과하지 못하면 에러를 발생시켜 런타임으로 못 넘어가게 함

동적 타입 언어

  • 자바스크립트
  • 변수 선언 시 미리 타입을 지정하지 않음
    => 어떤 타입의 값이라도 자유롭게 할당 가능
  • 런타임 시점에 할당된 값에 맞는 타입을 동적으로 결정
  • 할당 후에도 변수의 타입을 언제든지 변경 가능

정적 타입 언어 vs. 동적 타입 언어

정적 타입은 변수 선언 시점에 변수의 타입이 결정되며, 이후에도 변수의 타입을 변경할 수 없다.
동적 타입은 변수에 값을 할당하는 시점에 값에 따라 변수의 타입이 동적으로 결정되며, 이후에도 재할당에 의해 변수의 타입이 얼마든지 변경될 수 있다.

동적 타입 언어의 부작용

  1. 변수에 할당된 값에 따라 타입이 결정된다. => 코드를 실행해보기 전에는 타입을 확신할 수 없다.
  2. 자바스크립트 엔진에 의해 암묵적으로 값의 타입이 결정되어 개발자의 의도와 상관없이 타입이 자동 변환될 수 있다.
    => 복잡하고 큰 규모의 프로그램에서 신뢰성이 떨어지는 코드가 만들어질 수 있다.

동적 타입 언어 사용 시 주의사항

  1. 변수는 꼭 필요한 경우에만 제한적으로 선언한다. (변수의 갯수를 너무 많이 선언하지 않는다.
  2. 변수의 유효 범위(스코프)를 최대한 좁게 만든다. (함수 레벨 스코프인 var 대신 블록 레벨 스코프인 let, const 사용)
  3. 변수보다 상수를 사용하여 값의 변경을 억제한다. (잘 변경되지 않는 값은 대문자 상수로 선언, 재할당이 가능한 let보다 const를 더 많이 사용)
  4. 변수의 이름 짓기에 신경 쓴다. (목적을 한 번에 파악할 수 있는 직관적인 네이밍 권장)

코드는 동작하는 것만이 존재의 목적이 아니며, 개발자를 위한 문서이기도 하다.
사람이 이해하기 좋은 코드가 가독성 있는 코드이다.

profile
데이터 분석가 준비 중입니다 (티스토리에 기록: https://cherylog.tistory.com/)

0개의 댓글