2장. 타입

두더지·2024년 3월 3일
0

[우아한 타입스크립트 with 리액트] 책을 공부하면서 정리한 내용입니다.

타입

자바스크립트는 7가지 테이터 타입(자료형)을 정의한다.

  • undefined
  • null
  • Boolean
  • String
  • Symbol
  • Numeric
  • Object

프로그래밍에서의 타입은 수학의 집합과 유사하다.
타입은 값이 가질 수 있는 유효한 범위의 집합을 말한다.

function double(n) {
	return n*2;
}

double(2); // 4
double("z"); // NaN

double()의 내부 동작을 보면 숫자를 인자로 받을 거라고 기대한다. 만약 인자로 숫자가 아닌 다른 타입 값을 전달하면 의도치 않은 작업을 수행해서 원하는 값을 얻지 못한다.

function double(n:number) {
	return n*2;
}

double(2); // 4
double("z"); // Error

일단 타입을 제한하면 타입스크립트 컴파일러는 함수를 호출할 때 호환되는 인자로 호출했는지를 판단한다. 즉 string 타입인 'z'는 number에 할당할 수 없기 때문에 에러가 발생한다.

정적 타입, 동적 타입

타입을 결정하는 시점에 따라 정적 타입과 동적 타입으로 분류할 수 있다.

정적 타입 시스템에서는 모든 변수의 타입이 컴파일타임에 결정된다. 코드 수준에서 개발자가 타입을 명시해줘야하는 C, 자바, 타입스크립트 등이 정적 타입 언어레 속한다. 조금 번거로워보여도 컴파일타임에 타입 에러를 발견할 수 있기 때문에 안정성을 보장할 수 있다.

동적 타입 시스템에서는 변수 타입이 런타임에서 결정된다. 파이썬, 자바스크립트가 대표적인 동적 타입 언어로 개발자는 직접 타입을 정의해줄 필요가 없다. 프로그램을 실행할 때 타입 에러가 발견되기 때문에 개발 과정에서 에러 없이 마음껏 코드를 작성할 수 있지만, 언제 프로그램에 오류가 생길지 모르는 물안감에 휩싸이게 된다.

값 vs 타입

값은 프로그램이 처리하기 위해 메모리에 저장하는 모든 데이터이다. 즉, 프로그램에서 조작하고 다룰 수 있는 어떤 표현이며 다양한 형태의 데이터를 포함한다. 수학적 개념에서 값으로 여겨지는 1, 2, 3과 같은 데이터는 물론이고 1 + 2 같은 식이 반환하는 결과값 3도 값에 해당한다. 프로그래밍 관점에서는 문자열, 숫자, 변수, 매개변수 등이 값에 해당한다.
객체, 함수또한 값이다.

타입스크립트 코드에서 타입과 값을 구분하는 것은 어렵지 않다. 타입은 주로 타입 선언(:) 또는 단언 문 (as)으로 작성하고 값은 할당 연산자(=)로 작성한다.

interface Developer {
	name: string,
    isWorking: boolean;
}

const developer:Developer = { name: "Zig", isWorking: true };

위 예시코드에서는 변수 developer의 타입은 Developer이며, developer에 할당된 값은 { name: "Zip", isworking: true }이다.

값-타입 공간을 혼동하는 문제를 해결하기 위해서는 값과 타입을 구분해서 작성해야 한다.

타입을 확인하는 방법

타입스크립트에서 typeof, instanceof, 그리고 타입 단언을 사용해서 타입을 확인할 수 있다. typeof는 연산하기 전에 피연산자의 데이터 타입을 나타내는 문자열을 반환한다. typeof 연산자가 반환하는 값은 자바스크립트의 7가지 기본 데이터 타입과 Function(함수), 호스트 객체, object 객체가 될 수 이다.

profile
컴공생의 밍기적

0개의 댓글