[자바스크립트 Deep Dive] 06장. 데이터 타입

lemythe423·2023년 6월 25일
0

데이터 타입

데이터 타입이란?
값의 종류를 말하며, 자바스크립트의 모든 값은 타입을 갖는다. 크게 7개의 데이터 타입을 제공하며, 원시 타입(primitive type)과 객체 타입(object type)으로 나눌 수 있다.
데이터 타입의 종류에 따라 값을 생성한 목적과 용도가 다르며, 확보해야 할 메모리 공간의 크기와 값을 해석하는 방식 등이 다르다.

1. 숫자 타입

  • JS에는 오로지 하나의 숫자 타입만이 존재
  • 배정밀도 64비트 부동소수점 형식을 따름
  • 모든 수는 실수로 처리(정수만을 위한 타입 존재하지 X)
  • 정수, 실수, 2진수, 8진수 등 모든 타입이 64비트 부동소수점 형식의 2진수로 저장되며 값들은 모두 10진수로 해석됨
// 정수 역시 실수로 처리됨
console.log(1 === 1.0) // true

숫자 타입에는 세 가지의 특별한 값 존재

  • Infinity : 양의 무한대
  • -Infinity : 음의 무한대
  • NaN : 산술 연산 불가
console.log(1 * 'String') // NaN

2. 문자열 타입

  • 텍스트 데이터를 화면에 나타내기 위해 사용
  • 작은 따옴표 사용해서 표기하는 것이 일반적
  • 원시 타입이며, 변경 불가능한 값

C에서는 문자열을 문자의 배열로 표현하고, 자바는 문자열을 객체로 표현

3. 템플릿 리터럴

  • 멀티라인 문자열, 표현식 삽입, 태그드 템플릿 가능
  • 백틱(`) 사용하여 표현

멀티라인 문자열

  • 일반 문자열에서는 불가능한 줄바꿈(개행)이 가능
var str = `Hello
world.`; 
// Hello
// world.

표현식 삽입

  • 일반 문자열은 문자열 연산자(+)를 사용해 연결할 수 있다
  • 템플릿 리터럴에서는 표현식 삽입을 통해 간단히 문자열 삽입 가능
var first = 'Ung-mo';
var last = 'Lee';

console.log(`My name is ${first} ${last}`); 
// My name ìs Ung-mo Lee

// 표현식 평가 결과가 문자열이 아니여도 문자열로 강제 변환되어 삽입
console.log(`1 + 2 = ${1 + 2}`); // 1 + 2 = 3

4. 불리언 타입

  • 참과 거짓을 나타내는 truefalse

5. undefined 타입

  • var 로 선언한 변수는 암묵적으로 undefined로 초기화

변수 선언에 의해 확보된 메모리 공간을 빈 상태(garbage value가 들어가지 않고)로 두지 않고 undefined로 초기화하는 것

var foo;
console.log(foo); // undefined

6. null 타입

  • 변수에 값이 없다는 것을 프로그래머가 의도적으로 명시하는 것

변수에 null 값을 할당하는 것은 값에 대한 참조를 명시적으로 제거하는 것을 의미함

var foo = 'Lee';

foo = null
  • 또는, 함수가 유효한 값을 반환할 수 없는 경우에도 명시적으로 null 반환
  • 대표적으로 HTML요소를 검색해 반환하는 querySelector 메서드가 요소를 찾을 수 없는 경우 null 반환

7. 심벌 타입

  • 원시 타입으로, 변경 불가능한 값
  • 다른 값과 중복되지 않는 유일무이한 값
  • 객체의 유일한 프로퍼티 키를 만들기 위해 사용

데이터 타입의 필요성

1. 메모리 공간 확보와 참조
2. 값의 해석

메모리 공간 확보와 참조

얼마의 메모리 공간을 사용해야 낭비와 손실 없이 값을 저장할 수 있는지 알아야 함

var score = 100;

위의 코드가 실행되면 이 값을 저장하기 위한 메모리 공간을 확보해야 한다. 이때 JS 엔진은 데이터의 타입, 여기서는 값의 종류에 따라 정해져 있는 크기와 메모리 공간을 확보하게 된다.

값을 참조하려면 식별자 score를 통해 그 값(100)이 저장되어 있는 메모리 공간의 주소를 찾아가야 한다. 메모리에 있는 값을 참조하기 위해서는 그 메모리의 시작 셀(또는 블럭)의 주소와 값이 차지하고 있는 메모리 공간의 크기를 알아야 한다. 이는 값이 저장될 때 타입에 따라 결정되므로 값의 타입을 알아야 값을 참조할 수 있다.

값의 해석

메모리에 저장된 2진수 비트의 값을 해석하기 위해서도 타입을 알아야 한다. 0100 0001은 숫자로는 65이지만 문자로는 A이다.

동적 타이핑

정적 타입 언어 : 정적 타입의 언어(C/JAVA)는 변수를 선언할 때 데이터의 타입을 사전에 선언한다(명시적 타입 선언; explicit type declaration)

  • 정적 타입 언어는 변수의 타입을 변경할 수 없음
  • 타입에 맞는 값만 할당 가능
  • 컴파일 시점에 타입 체크
  • 타입의 일관성을 강제하여 안정적 코드의 구현
  • C, C++, 자바, 코틀린, 고, 러스트 등

동적 타입 언어 : 선언이 아닌 할당에 의해 타입이 결정(타입 추론; type inference)

  • 어떤 데이터 타입의 값이라도 자유롭게 할당
  • 값을 할당하는 시점에 변수의 타입이 동적으로 결정
  • 자바스크립트, 파이썬, PHP, 루비

동적 타입 언어의 문제점

  • 값이 언제든 변경될 수 있으므로 프로그래에서 변화하는 변수 값을 추적하기 어려울 수 있음
  • 값의 변경에 의해 언제든지 타입도 변경될 수 있음
  • 개발자 의도와 상관없이 암묵적으로 타입이 자동으로 변환되기도 함
  • 유연성은 높으나 신뢰성은 떨어진다

동적 타입 언어의 주의사항

  1. 변수는 꼭 필요한 경우에만 사용할 것
  2. 변수의 유효 범위를 좁게 만들어 부작용을 억제할 것
  3. 전역 변수는 최대한 사용하지 않을 것
  4. 변수보다는 상수를 사용
  5. 변수 이름을 목적과 의미를 파악할 수 있게 네이밍할 것
profile
아무말이나하기

0개의 댓글