Type something to search...
TypeScript 101: 자바스크립트에 '안전벨트' 채우기

TypeScript 101: 자바스크립트에 '안전벨트' 채우기

자바스크립트의 배신

자바스크립트(JavaScript)는 세상에서 가장 널리 쓰이는 언어이자, 매우 유연하고 작성하기 쉬운 언어입니다. 하지만 프로젝트 규모가 커지고 복잡해질수록 그 '유연함'은 종종 개발자의 발목을 잡는 치명적인 독이 되곤 합니다.

function addNumbers(a, b) {
  return a + b;
}

// 개발자의 의도: 숫자 1과 2를 더해서 3을 기대함
console.log(addNumbers(1, 2)); // 3

// 실수로 문자열을 넣었을 때
console.log(addNumbers("1", "2")); // "12"

위의 코드에서 자바스크립트는 에러를 뿜어내지 않습니다. 묵묵히 문자열 "1"과 "2"를 이어 붙여 "12"라는 엉뚱한 결과를 반환할 뿐입니다. 이 에러는 코드를 실행하는 순간(Runtime)에야 비로소 발견되며, 운이 나쁘면 서비스가 배포된 후 사용자의 화면에서 장애로 터져버립니다.

이러한 동적 타입 언어의 한계를 극복하고, 코드를 '실행하기 전'에 버그를 미리 잡아내기 위해 마이크로소프트(Microsoft)에서 개발한 언어가 바로 **TypeScript(타입스크립트)**입니다.

TypeScript란 무엇인가?

TypeScript는 이름 그대로 "타입(Type)이 추가된 자바스크립트"입니다. 공식적으로는 **JavaScript의 상위 집합(Superset)**이라고 부릅니다. 기존의 자바스크립트 문법을 100% 그대로 지원하면서, 그 위에 정적 타입 검사(Static Type Checking) 기능을 얹은 것입니다.

브라우저나 Node.js 환경은 TypeScript 코드를 직접 읽을 수 없습니다. 따라서 TypeScript 코드는 실행되기 전에 컴파일러(TSC)를 통해 순수한 JavaScript 코드로 변환(Transpile)되는 과정을 거칩니다.

타입스크립트를 쓰면 뭐가 좋나요?

  1. 실행 전 에러 발견 (안정성): 에디터(VS Code 등)에서 코드를 타이핑하는 순간, 혹은 빌드 과정에서 타입 불일치로 인한 오류를 빨간 줄로 즉각 경고해 줍니다. "런타임 에러"의 공포에서 크게 벗어날 수 있습니다.
  2. 강력한 자동 완성 (개발 생산성): 객체 안에 어떤 프로퍼티들이 있는지, 함수가 어떤 타입의 인자를 받고 어떤 타입을 반환하는지 에디터가 정확히 알고 있기 때문에 인텔리센스(자동 완성)가 매우 훌륭하게 동작합니다.
  3. 코드 자체가 훌륭한 명세서 (협업): 다른 사람이 작성한 복잡한 함수를 사용할 때, 그 내부 로직을 다 뜯어보지 않아도 선언된 타입만 보고 사용법을 완벽히 이해할 수 있습니다.

핵심 문법 살짝 맛보기

1. 기본 타입 명시

변수명이나 인자 뒤에 콜론(:)을 붙여 타입을 명시합니다.

// 기본 타입 (Primitive Types)
let userName: string = "Jules";
let age: number = 30;
let isDeveloper: boolean = true;

// 배열 (Array)
let skills: string[] = ["React", "TypeScript", "Node.js"];

// 위에서 보았던 끔찍한 함수에 안전벨트를 채워봅시다.
function addNumbers(a: number, b: number): number {
  return a + b;
}

// 이제 에디터가 빨간 줄을 그어주며 실행을 막습니다!
// Error: Argument of type 'string' is not assignable to parameter of type 'number'.
addNumbers("1", "2");

2. 객체의 형태 정의 (Interface & Type Alias)

자바스크립트 개발 시 가장 헷갈리는 것이 객체(Object)에 어떤 데이터가 들어있는지 파악하는 것입니다. TS에서는 interfacetype 키워드를 통해 객체의 뼈대를 미리 설계할 수 있습니다.

// User라는 객체의 타입을 정의합니다.
interface User {
  id: number;
  name: string;
  email: string;
  optionalProfileImage?: string; // ?를 붙이면 '있어도 되고 없어도 되는' 선택적 속성이 됩니다.
}

// 변수에 위에서 만든 타입을 부여합니다.
const myProfile: User = {
  id: 1,
  name: "Jules",
  email: "[email protected]"
  // optionalProfileImage는 생략해도 에러가 나지 않습니다.
};

// myProfile. 을 치는 순간 id, name, email 속성이 자동 완성됩니다!

3. 유니언 타입 (Union Types)

자바스크립트의 유연함을 어느 정도 허용하고 싶을 때 사용합니다. "A 또는 B 타입이 될 수 있다"고 지정합니다.

// id는 숫자일 수도 있고, 고유한 문자열일 수도 있습니다.
function printId(id: number | string) {
  console.log(`Your ID is: ${id}`);
}

printId(101); // OK
printId("UUID-1234"); // OK
printId(true); // Error: boolean은 허용하지 않음

마무리: 그래서 도입해야 할까요?

결론부터 말하자면, "단기 해커톤이나 아주 가벼운 스크립트가 아니라면 무조건 도입하는 것이 이득"입니다.

초기에는 변수마다 타입을 일일이 지정해 주는 것이 코딩 속도를 늦추고 귀찮게 느껴질 수 있습니다. 하지만 프로젝트의 규모가 커질수록, 타입스크립트가 사전에 잡아주는 수많은 버그들과 강력한 자동 완성 기능은 그 초기 비용을 몇 배 이상으로 보상해 줍니다. 2024년 현재 프론트엔드 및 백엔드(Node.js) 생태계에서 TypeScript는 더 이상 선택이 아닌 '기본 소양'으로 자리 잡았습니다.

Related Post

도커(Docker) 완벽 가이드: 초보자를 위한 컨테이너 기술 입문 및 활용법

도커(Docker) 완벽 가이드: 초보자를 위한 컨테이너 기술 입문 및 활용법

도커(Docker)란 무엇인가? 최근 몇 년간 소프트웨어 개발과 배포 환경에서 가장 혁신적인 변화를 이끌어낸 기술 중 하나가 바로 '도커(Docker)'입니다. 도커는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다. 도커는 소프트웨어를 '컨테이너(Container)'라는 표준화된 유닛으로 패키징하며, 이 컨테이너에

쿠버네티스(Kubernetes) 완벽 이해: 도커를 넘어선 컨테이너 오케스트레이션

쿠버네티스(Kubernetes) 완벽 이해: 도커를 넘어선 컨테이너 오케스트레이션

쿠버네티스(Kubernetes)란 무엇인가? 도커(Docker)가 단일 컨테이너의 생성과 관리를 혁신했다면, 쿠버네티스(Kubernetes, 줄여서 k8s)는 수십, 수백 개의 컨테이너를 대규모로 배포, 확장, 관리하는 과정을 자동화해주는 '컨테이너 오케스트레이션(Container Orchestration)' 도구입니다. 구글(Google)에서 자

Git 브랜치 전략 완벽 가이드: Git Flow부터 GitHub Flow까지

Git 브랜치 전략 완벽 가이드: Git Flow부터 GitHub Flow까지

협업의 필수품, Git 브랜치 전략 소프트웨어 개발 프로젝트에서 여러 명의 개발자가 동시에 코드를 작성하다 보면 필연적으로 충돌과 혼란이 발생합니다. "누가 언제 이 코드를 수정했지?", "배포 나갈 안정적인 버전은 어디에 있지?" 이러한 문제를 해결하기 위해 필수적으로 사용하는 도구가 바로 Git(깃)입니다. Git의 강력한 기능 중 하나는 바

React vs Vue.js: 2024년 프론트엔드 프레임워크 선택 가이드

React vs Vue.js: 2024년 프론트엔드 프레임워크 선택 가이드

프론트엔드 전쟁, 당신의 선택은? 웹 개발에 조금이라도 관심이 있다면 'React(리액트)'와 'Vue.js(뷰)'라는 이름을 한 번쯤은 들어보셨을 것입니다. jQuery 시대가 저물고 모던 웹 애플리케이션(SPA) 시대가 도래하면서, 이 두 라이브러리/프레임워크는 전 세계 프론트엔드 생태계를 양분하며 치열하게 경쟁하고 있습니다. 새로운 프로젝트

웹 사이트 성능 최적화 전략: 로딩 속도가 비즈니스에 미치는 영향

웹 사이트 성능 최적화 전략: 로딩 속도가 비즈니스에 미치는 영향

로딩 속도 1초의 나비효과 "빨리빨리" 민족인 한국인들뿐만 아니라, 전 세계 인터넷 사용자들의 인내심은 갈수록 짧아지고 있습니다. 아마존(Amazon)의 한 연구 결과에 따르면, 웹사이트 로딩 시간이 100ms(0.1초) 지연될 때마다 판매량이 1% 감소한다고 합니다. 구글(Google) 역시 페이지 로딩 시간이 1초에서 3초로 늘어나면 사

파이썬 데이터 분석 기초: Pandas(판다스) 핵심 기능 마스터하기

파이썬 데이터 분석 기초: Pandas(판다스) 핵심 기능 마스터하기

파이썬 데이터 생태계의 엑셀, Pandas 데이터 과학(Data Science)이나 머신러닝 분야에서 파이썬(Python)이 압도적인 1위 언어로 자리 잡을 수 있었던 이유는 무엇일까요? 바로 데이터를 다루는 데 특화된 훌륭한 라이브러리 생태계 덕분입니다. 그 생태계의 가장 중심에 서 있는 핵심 라이브러리가 바로 **Pandas(판다스)**입니다.

GitHub Actions로 시작하는 완벽한 CI/CD 파이프라인 자동화

GitHub Actions로 시작하는 완벽한 CI/CD 파이프라인 자동화

수동 배포의 악몽에서 벗어나기 "자, 이제 코딩 끝! 서버에 접속해서 git pull 받고, 의존성 다시 설치하고, 빌드하고, 기존 프로세스 죽이고, 새 프로세스 띄우자." 프로젝트 초기에는 이러한 수동 배포 과정이 크게 번거롭지 않을 수 있습니다. 하지만 서비스가 커지고 팀원이 늘어나면서 하루에도 수십 번씩 코드가 통합되고 배포되어야 한다면

생성형 AI 시대, 개발자 프롬프트 엔지니어링 실전 가이드

생성형 AI 시대, 개발자 프롬프트 엔지니어링 실전 가이드

서론: 왜 개발자에게 프롬프트 엔지니어링이 필요한가? 생성형 AI가 코드를 작성하고 버그를 수정하는 시대, 개발자의 역할은 단순히 코드를 '타이핑'하는 것에서 AI와 협업하여 문제를 '설계하고 해결'하는 방향으로 빠르게 진화하고 있습니다. 여기서 가장 중요한 역량으로 떠오른 것이 바로 프롬프트 엔지니어링(Prompt Engineering)

2024년 프론트엔드 생태계 트렌드: 무엇을 배우고 준비해야 할까?

2024년 프론트엔드 생태계 트렌드: 무엇을 배우고 준비해야 할까?

서론: 끊임없이 변화하는 프론트엔드 생태계 웹 개발 분야 중에서도 프론트엔드 생태계는 그 변화의 속도가 눈부시게 빠른 곳입니다. "어제 배운 기술이 오늘 레거시가 된다"는 우스갯소리가 있을 정도로 새로운 프레임워크와 도구들이 끊임없이 쏟아져 나옵니다. 2024년 현재 프론트엔드 개발 트렌드는 단연 **'서버 중심의 렌더링(Server-Side Re

Next.js 15+ 딥다이브: 서버 컴포넌트 최적화와 렌더링 아키텍처의 진화

Next.js 15+ 딥다이브: 서버 컴포넌트 최적화와 렌더링 아키텍처의 진화

서론: React의 철학이 변화하다, Next.js와 App Router 웹 개발 생태계에서 React의 위상은 굳건하지만, 최근 몇 년간 프론트엔드 아키텍처의 패러다임은 큰 변화를 겪고 있습니다. 클라이언트 사이드 렌더링(CSR)의 한계를 극복하기 위해 등장했던 SSR(Server-Side Rendering)과 SSG(Static Site Gen