Menu

TypeScript vs Python: 타입, 속도, 용도 비교

TypeScript와 Python은 둘 다 가비지 컬렉션을 쓰는 고수준 언어지만, TypeScript는 코드가 실행되기 전에 타입을 검사하고 Python의 타입 힌트는 선택 사항이며 런타임에 무시됩니다. 타입, 런타임, 속도, 생태계, 용도를 같은 프로그램으로 나란히 비교합니다.

이 페이지에는 실행 가능한 에디터가 있습니다 - 편집하고 실행하면 결과를 바로 볼 수 있습니다.

TypeScript와 Python은 둘 다 가비지 컬렉션, 일급 함수, 거대한 패키지 생태계를 갖춘 고수준 언어입니다. 가장 큰 차이는 타입입니다. TypeScript의 타입은 프로그램이 실행되기 전에 컴파일러가 검사하고, Python의 타입 힌트는 인터프리터가 무시하는 선택적 표기입니다. 두 언어는 서로 다른 엔진에서 실행되고 서로 다른 종류의 소프트웨어를 주도합니다. TypeScript는 웹을, Python은 데이터 작업과 스크립팅을 주도합니다.

TypeScript로 쓴 작은 프로그램입니다. Run을 눌러 보세요.

출력:

162.25
[ 'Ada', 'Grace', 'Linus' ]

같은 프로그램을 타입 힌트를 붙여 Python으로 쓰면 이렇습니다.

from dataclasses import dataclass


@dataclass
class Order:
    customer: str
    amount: float
    paid: bool


def total_paid(orders: list[Order]) -> float:
    return sum(o.amount for o in orders if o.paid)


orders = [
    Order("Ada", 120.0, True),
    Order("Grace", 80.5, False),
    Order("Linus", 42.25, True),
]

by_amount = [o.customer for o in sorted(orders, key=lambda o: o.amount, reverse=True)]
print(total_paid(orders))
print(by_amount)
162.25
['Ada', 'Grace', 'Linus']

모양은 비슷합니다. 레코드를 위한 타입, 타입이 붙은 매개변수를 받는 함수, 값의 리스트가 있습니다. 눈에 보이는 차이는 문법(중괄호와 세미콜론 대 들여쓰기), interface 대 @dataclass, 그리고 filter/reduce를 쓰는 화살표 함수 대 제너레이터 표현식입니다.

TypeScript와 Python 한눈에 비교

TypeScriptPython
타입정적, 컴파일 시점에 검사, 런타임에는 지워짐동적, 선택적 타입 힌트는 런타임에 강제되지 않음
타입 검사기언어의 일부인 tsc별도 도구: mypy, pyright 등
실행 환경JavaScript 엔진: 브라우저, Node.js, Deno, BunCPython(표준 인터프리터), PyPy 등
실행 방식JavaScript로 컴파일된 뒤 엔진이 JIT 컴파일CPython에서 바이트코드를 인터프리트
블록중괄호 { }들여쓰기
숫자number(64비트 부동소수점)와 bigintint(크기 제한 없음)와 float
동시성이벤트 루프당 스레드 하나, async/await, 병렬 작업은 워커asyncio, 스레드, 멀티프로세싱
패키지 관리자npm, pnpm, Yarn, Bunpip, uv, Poetry
강한 분야웹 프론트엔드, Node.js 백엔드, 풀스택 앱데이터 과학, 머신러닝, 스크립팅, 자동화, 백엔드

문법 나란히 보기

Python의 타입 힌트를 안다면 대부분의 TypeScript 표기에는 직접 대응하는 것이 있습니다.

PythonTypeScript
count: int = 0let count: number = 0;
def add(a: int, b: int) -> int:function add(a: number, b: number): number {
lambda x: x * 2(x) => x * 2
list[str]string[]
dict[str, int]Record<string, number> 또는 Map<string, number>
tuple[int, str][number, string]
str | Nonestring | null 또는 string | undefined
Literal["asc", "desc"]"asc" | "desc"
Callable[[int], str](n: number) => string
TypedDictinterface 또는 type
@dataclassclass, 또는 단순 데이터라면 interface
Anyany
None, True, Falsenull(또는 undefined), true, false
and, or, not&&, ||, !
f"Hello {name}"`Hello ${name}`

정적 타입과 타입 힌트

두 언어 모두 같은 표기, a: number나 a: int를 쓸 수 있습니다. 그다음에 일어나는 일이 다릅니다.

TypeScript에서는 무엇이든 실행되기 전에 컴파일러가 모든 호출을 검사합니다. 잘못된 인수는 빌드를 멈춥니다.

index.ts(7,17): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.

Python에서 힌트는 메타데이터입니다. 인터프리터는 호출을 실행하고 문자열을 반환합니다.

def add(a: int, b: int) -> int:
    return a + b


print(add(2, 3))      # 5
print(add("2", "3"))  # 23, the hints are not enforced

검사는 mypy 같은 도구로 하는 별도 단계입니다.

$ mypy hints.py
hints.py:6: error: Argument 1 to "add" has incompatible type "str"; expected "int"  [arg-type]
hints.py:6: error: Argument 2 to "add" has incompatible type "str"; expected "int"  [arg-type]
Found 2 errors in 1 file (checked 1 source file)

그래서 Python의 타입은 설계상 점진적 입니다. 표기가 없는 코드는 그냥 검사하지 않고, 도움이 되는 곳에 힌트를 더합니다. TypeScript도 느슨할 수 있지만(any는 값에 대한 검사를 끕니다), 기본값인 strict가 켜져 있으면 표기 없는 매개변수는 그냥 통과하는 대신 오류가 됩니다.

두 언어가 공유하는 점도 하나 있습니다. 둘 다 프로그램이 실행되는 동안에는 타입을 검사하지 않습니다. TypeScript는 타입을 지우고, Python은 힌트를 무시합니다. API에서 온 JSON처럼 런타임에 들어오는 데이터는 두 언어 모두 검증이 필요합니다(TypeScript의 Zod, Python의 Pydantic 같은 라이브러리가 스키마로 이를 처리합니다).

숫자의 동작이 다르다

TypeScript는 JavaScript의 숫자를 씁니다. number는 정수와 소수 모두를 위한 64비트 부동소수점 값이고, bigint는 큰 정수를 위한 별도 타입입니다. Python의 int는 알아서 얼마든지 커집니다.

출력:

0.30000000000000004
9007199254740992
3.5 3
1267650600228229401496703205376n

Python의 정수는 크기와 상관없이 정확하므로 2**53 + 1에 대해 9007199254740993을 출력하며, 정수 나눗셈 전용 연산자 7 // 2가 있어서 3을 돌려줍니다. TypeScript에는 int 타입이 없습니다. 정수는 소수 부분이 없을 뿐인 number입니다.

런타임과 성능

TypeScript는 JavaScript로 실행됩니다. V8(Chrome과 Node.js), JavaScriptCore(Safari와 Bun), SpiderMonkey(Firefox)는 자주 실행되는 코드를 실행 중에 기계어로 컴파일하므로, TypeScript의 빡빡한 반복문은 대개 바이트코드를 실행하는 CPython의 같은 반복문보다 훨씬 빠릅니다.

많은 프로그램에서 이 차이는 들리는 것만큼 중요하지 않습니다.

  • Python의 수치 계산과 머신러닝 라이브러리(NumPy, pandas, PyTorch)는 무거운 작업을 컴파일된 C, C++, CUDA 코드에서 하므로, 이를 호출하는 Python 프로그램의 안쪽 반복문은 Python에서 돌지 않습니다.
  • 어느 언어로 만든 웹 서버든 대부분의 시간을 데이터베이스와 네트워크를 기다리는 데 씁니다.

두 언어 모두 대부분의 코드를 메인 스레드 하나에서 실행합니다. Node.js의 TypeScript는 이벤트 루프와 async/await로 동시성을 처리하고, 병렬 CPU 작업에는 워커 스레드를 씁니다. Python에는 같은 방식의 동시성을 위한 asyncio와 함께 스레드와 프로세스가 있습니다.

생태계와 용도

TypeScript 가 기본인 분야:

  • 웹 프론트엔드: React, Angular, Vue, Svelte 모두 지원하며, 브라우저가 실행하는 JavaScript로 컴파일됩니다.
  • Node.js, Deno, Bun의 서버 코드: Express, Fastify, NestJS, Hono로 만드는 API.
  • Next.js 프로젝트처럼 서버와 브라우저가 타입 정의를 공유하는 풀스택 앱.
  • 개발 도구, 명령줄 도구, Electron 데스크톱 앱.

Python 이 기본인 분야:

  • 데이터 분석과 시각화(pandas, NumPy, Matplotlib, Jupyter 노트북).
  • 머신러닝과 AI(PyTorch, scikit-learn, 대부분의 모델 학습 코드).
  • 스크립팅과 자동화: 파일 처리, 시스템 관리, 연결용 코드.
  • Django, Flask, FastAPI로 만드는 웹 백엔드.
  • 과학 계산과 교육.

두 언어가 가장 많이 겹치는 곳은 백엔드 웹 개발입니다. 팀은 흔히 스택의 나머지가 무엇을 쓰는지로 고릅니다. TypeScript 프론트엔드와 코드를 공유하려면 TypeScript를, 데이터와 ML 코드 옆에 두려면 Python을 고릅니다.

무엇을 배워야 할까?

  • 웹을 위한 것을 만든다면? JavaScript를 배운 뒤 TypeScript를 배우세요. 브라우저에서 실행되는 것은 결국 모두 JavaScript이고, 대부분의 전문적인 프론트엔드 코드는 TypeScript로 작성됩니다.
  • 데이터, AI, 자동화를 다룬다면? Python을 배우세요. 그 분야의 Python 라이브러리는 JavaScript 세계에 제대로 된 대응물이 없습니다.
  • 첫 언어이고 정해진 목표가 없다면? Python은 쓸모 있는 프로그램을 쓰기 전에 배울 문법이 더 적습니다. TypeScript는 JavaScript 위에 타입 시스템을 더하므로 처음에는 배울 것이 늘지만, 프로그램이 커질수록 그 값을 합니다.

많은 개발자가 둘 다 씁니다. 데이터와 스크립트에는 Python을, 제품의 웹 코드에는 TypeScript를 씁니다. 이미 Python의 타입 힌트를 안다면 TypeScript의 표기는 익숙해 보일 것입니다. 새로운 점은 컴파일러가 기본적으로 이를 강제한다는 것과, 그 아래의 런타임이 JavaScript라는 것입니다.

자주 묻는 질문

TypeScript가 Python보다 더 좋은가요?

일반적으로 어느 쪽이 낫다고 할 수 없고, 강한 분야가 다릅니다. TypeScript는 웹 프론트엔드의 표준 선택이고 Node.js 서버에서도 흔하며, 타입 검사가 일상적인 작업 흐름에 녹아 있습니다. Python은 데이터 과학, 머신러닝, 스크립팅, 자동화를 이끌며, mypy나 pyright 같은 도구로 검사할 수 있는 타입 힌트가 있습니다.

TypeScript가 Python보다 빠른가요?

언어 자체로 작성된 CPU 중심 코드라면 대개 그렇습니다. TypeScript는 JavaScript로 컴파일되고 V8 같은 엔진이 런타임에 기계어로 컴파일하지만, 표준 Python 인터프리터인 CPython은 바이트코드를 실행합니다. C로 작성된 라이브러리(NumPy, pandas, PyTorch)에서 대부분의 시간을 보내는 Python 프로그램은 이 제약을 받지 않고, 네트워크 중심 서버에서는 차이가 작은 경우가 많습니다.

Python에도 TypeScript 같은 정적 타입이 있나요?

Python에는 선택적 타입 힌트(def add(a: int, b: int) -> int)가 있지만 인터프리터가 강제하지 않습니다. add("2", "3")은 실행되어 "23"을 반환합니다. mypy나 pyright 같은 별도 검사기가 불일치를 보고합니다. TypeScript에서는 검사가 컴파일러의 주된 일이고, 보통 타입 오류가 있는 코드는 빌드되지 않도록 프로젝트를 설정합니다.

TypeScript와 Python 중 무엇을 먼저 배워야 하나요?

무엇을 만들고 싶은지로 고르세요. 웹사이트와 웹 앱이라면 브라우저는 JavaScript만 실행하므로 JavaScript를 배운 뒤 TypeScript를 배우세요. 데이터 분석, 머신러닝, 자동화, 또는 문법이 아주 적은 첫 언어를 원한다면 Python으로 시작하세요. 핵심 개념(변수, 함수, 반복문, 객체)은 어느 쪽이든 그대로 이어집니다.

Coddy programming languages illustration

Coddy로 코딩 배우기

시작하기