Skip to content

TypeScript

JS 생태계에서 협업을 가능하게 만드는 언어

TypeScript는 JavaScript를 더 안전하게 만드는 언어라기보다는, 코드베이스가 커질수록 사람 사이의 약속을 강제하는 도구에 가깝다.

Unity 개발자 관점에서는 이렇게 이해하면 가장 빠르다:

TypeScript는 JS 세계에서 C#의 타입 시스템과 인터페이스 문화 역할을 한다.


1. 타입은 설계를 문서화하는 수단이다

Section titled “1. 타입은 설계를 문서화하는 수단이다”

TypeScript의 타입은 컴파일러만을 위한 것이 아니다. 사람에게 보여주는 설계 문서에 가깝다.

interface UserProfile {
id: string;
level: number;
nickname?: string;
}

이 타입 하나로:

  • 서버 개발자
  • 프론트엔드 개발자
  • 툴 개발자

같은 데이터 구조를 기준으로 대화하게 된다.

  • C#의 interface, DTO, public API
  • ScriptableObject로 구조를 고정하는 설계 방식
  • Addressables 설정 구조를 문서로 남기는 감각

대화용 정리 문장

“TypeScript 타입은 런타임 기능이라기보단, API와 데이터 구조를 팀 단위로 공유하기 위한 설계 문서에 가깝다고 봅니다.”


2. any를 쓰는 순간 발생하는 비용

Section titled “2. any를 쓰는 순간 발생하는 비용”

any는 TypeScript에서 컴파일러에게 타입 검증 책임을 포기한다는 선언이다.

function handle(data: any) {
return data.user.profile.level;
}

이 코드는:

  • API 구조가 바뀌어도
  • 필드가 사라져도
  • 타입이 틀려도

컴파일 에러 없이 통과한다.

  • 타입 안정성 상실
  • 자동 완성 및 리팩토링 품질 저하
  • 런타임 에러 가능성 증가
  • object로 모든 걸 받는 코드
  • Dictionary<string, object> 남발
  • dynamic에 의존한 로직

대화용 정리 문장

“any를 쓰는 순간, API 변경을 컴파일 타임에 잡아주는 안전망을 스스로 버리는 셈이라서 최소한의 경계 지점에서만 사용하는 게 맞다고 생각합니다.”


3. API 변경은 어떻게 컴파일 타임에 감지되는가

Section titled “3. API 변경은 어떻게 컴파일 타임에 감지되는가”

TypeScript가 협업에서 강력한 이유는, API 변경 비용을 런타임이 아니라 컴파일 타임으로 끌어올린다는 점이다.

// before
interface User {
id: string;
level: number;
}
// after
interface User {
id: string;
exp: number;
}

이 변경이 발생하면:

  • user.level을 사용하는 모든 코드에서 컴파일 에러 발생
  • QA나 런타임 이전에 문제 인지 가능
  • 변경 영향 범위가 즉시 드러남
  • C#에서 프로퍼티 이름 변경 시 컴파일 에러 발생
  • Addressables key 변경 시 참조 코드가 깨지는 경험
  • ScriptableObject 구조 변경 시 직렬화 문제를 바로 인지하는 흐름

대화용 정리 문장

“TypeScript는 API 변경이 런타임 버그가 아니라 컴파일 에러로 드러나게 만들어서, 대규모 협업에서 안정성이 크게 올라갑니다.”


“TypeScript는 JS를 빠르게 만드는 언어라기보다는, 팀 단위 협업에서 API와 데이터 구조를 타입으로 문서화하고, 변경 비용을 런타임이 아니라 컴파일 타임으로 옮겨주는 도구라고 생각합니다. any를 쓰는 순간 그 안전망을 포기하게 되죠.”


Unity 개발자가 TypeScript를 이해하면 좋은 이유

Section titled “Unity 개발자가 TypeScript를 이해하면 좋은 이유”
  • 웹 기반 툴, 관리자 페이지, 빌드 파이프라인과 자연스럽게 소통 가능
  • 서버/프론트 개발자의 의사결정 맥락 이해
  • 단순 클라이언트 개발자가 아니라 플랫폼 관점 개발자로 확장됨