본문 바로가기
C.W.K.
Stream
Lesson 03 of 05 · published

Python과 TypeScript 사이: 문법보다 개념 옮기기

~9 min · ts-epilogue, python, sibling-quest, bridge

Level 0Curious
0 XP0/93 lessons0/23 achievements
0/100 XP to next level100 XP to go0% complete
"두 언어를 오갈 때 철자를 번역하지 말고, 각 언어가 같은 문제를 어디에서 해결하는지 찾아."

닮은 생각

Python의 리스트 컴프리헨션과 TypeScript의 filter·map은 컬렉션 변환을 표현하고, Python 타입 힌트와 TypeScript 주석은 함수의 입력과 출력을 문서화해. typing.Protocol과 TypeScript 인터페이스는 구체 클래스보다 필요한 모양을 중심으로 생각하게 하지.

판별 가능한 합집합도 두 언어에서 상태 기계를 표현하는 데 쓸 수 있어. Python은 Literal과 패턴 매칭, TypeScript는 리터럴 타입과 제어 흐름 좁히기를 활용해. async와 await 철자도 닮았지만 실행기와 취소, 작업 스케줄링의 세부는 같다고 가정하면 안 돼.

직접 대응하지 않는 영역

TypeScript의 매핑된 타입, 조건부 타입, 템플릿 리터럴 타입은 타입 수준의 관계 계산에 강해. Python은 메타클래스와 데스크립터, 동적 런타임 리플렉션에서 다른 힘을 가져. 비슷한 이름 하나를 찾아 억지로 일대일 대응시키면 각 언어의 장점을 놓쳐.

동시성 모델도 구체적으로 배워야 해. JavaScript의 이벤트 루프와 Python의 비동기 실행은 표면 문법이 닮았어도 작업 생성, 스레드, 프로세스, 취소 동작이 다르다.

형제 퀘스트

이 TypeScript Quest는 프런트엔드 절반이고 Python Quest는 백엔드 절반이야. 둘 다 17개 트랙과 약 93개 레슨, 같은 목소리, cwkPippa 소스를 읽는 같은 목표를 가져. 각각 독립적으로 걸을 수 있고 함께 걸으면 한 시스템의 두 언어를 잇는 lingua franca 듀오가 돼.

두 언어를 잇는 다리는 타입 이름이 아니라 데이터 모양, 오류 경계, 비동기 흐름 같은 문제 해결 개념이야. 개념을 옮긴 뒤 각 런타임의 규칙으로 다시 구현해.

Code

같은 패턴 — Python·python
# Python — Literal + match 가진 discriminated union.
from typing import Literal

type Shape = (
    dict[Literal['kind'], Literal['circle']] | dict[Literal['kind'], Literal['square']]
)

def area(s):
    match s['kind']:
        case 'circle': return 3.14 * s['radius'] ** 2
        case 'square': return s['side'] ** 2
같은 패턴 — TypeScript·typescript
// TypeScript — 같은 패턴.
type Shape =
  | { kind: 'circle'; radius: number }
  | { kind: 'square'; side: number };

function area(s: Shape): number {
  switch (s.kind) {
    case 'circle': return Math.PI * s.radius ** 2;
    case 'square': return s.side ** 2;
  }
}

External links

Exercise

이 퀘스트에서 배운 TypeScript 패턴 하나를 골라 Python으로 같은 생각을 표현해 봐. 필요하면 Pydantic을 사용하고, 두 언어 가운데 어느 쪽이 그 패턴을 더 자연스럽게 표현하는지 적어. 패턴에 따라 답이 달라지는 그 비대칭이 핵심이야.
Hint
두 언어에는 우열보다 역할 차이가 있어. 시스템의 각 부분에 맞는 강점을 살려 같은 계약을 이어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인 — 댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.