7.typescript
Episode 7: "타입스크립트: 자바스크립트에게 날개를 달아주다"
마이크로소프트가 구원한 동적 타입의 혼돈
프롤로그: 자바스크립트의 원죄
2012년, 전 세계 수백만 개발자들이 똑같은 문제로 고통받고 있었습니다.
// 언제든 터질 수 있는 시한폭탄
function calculateTotal(items) {
return items.reduce((sum, item) => sum + item.price, 0);
}
// 6개월 후, 누군가가 이렇게 호출함
calculateTotal(null); // 💥 Cannot read property 'reduce' of null
// 혹은 더 미묘하게
calculateTotal([
{ price: 100 },
{ price: "200" } // 문자열!
]); // 100200 (???)
이런 오류들은 런타임에서야 발견되었습니다. 사용자가 버튼을 클릭하는 그 순간, 프로덕션 환경에서 말이죠. 마치 비행 중에 엔진 결함을 발견하는 것과 같았습니다.
자바스크립트의 동적 타입 시스템은 빠른 프로토타이핑에는 좋았지만, 대규모 애플리케이션에서는 재앙이었습니다.
이 글에서 다룰 내용
- "자바스크립트는 장난감"이라는 편견의 역사
- 안더스 하일스베르그의 마이다스의 손
- 점진적 타입 시스템: 타입스크립트의 천재성
- Angular와 Vue의 TS 전향: 승부의 종료
Chapter 1: "자바스크립트는 장난감"이라는 편견
2000년대, 진지한 개발자들의 경멸
자바스크립트는 오랫동안 "진짜" 프로그래밍 언어로 인정받지 못했습니다. Java, C#, C++ 개발자들은 자바스크립트를 장난감 언어로 취급했죠.
자바스크립트에 대한 편견들 (2000년대)
왜 자바스크립트는 무시당했을까
타입 안전성 부재:
- "변수가 갑자기 문자열이 되고 숫자가 되는 언어를 믿을 수 있나?"
클래스 시스템 부재:
- "프로토타입? 그게 뭔가? 제대로 된 OOP도 지원 안 하는군."
개발 도구 부족:
- "IDE 자동완성도 제대로 안 되는데 어떻게 대규모 개발을 하나?"
런타임 오류 천국:
- "undefined is not a function을 몇 번이나 봐야 하나?"
대규모 자바스크립트 애플리케이션의 악몽
2010년대 초, 자바스크립트 애플리케이션은 점점 커졌습니다. Gmail, Facebook, Twitter 같은 **거대한 SPA(Single Page Application)**들이 등장했죠. 그러나 도구는 따라오지 못했습니다.
// 2011년의 전형적인 대규모 JS 프로젝트
var userService = {
currentUser: null,
loadUser: function(id) {
// 1000줄짜리 함수...
ajax.get('/api/users/' + id, function(data) {
this.currentUser = data; // 어? 'this'가 뭐지?
});
},
getUserName: function() {
// currentUser가 null이면? 아무도 모름
return this.currentUser.name; // 💥
}
};
// 6개월 후, 다른 개발자가
userService.loadUser("123"); // 문자열을 넘겨도 컴파일 타임에는 알 수 없음
대규모 자바스크립트 프로젝트의 문제들
- 리팩토링 불가능: 변수명 하나 바꾸는 것도 전체 검색에 의존
- 문서화 부족: 함수가 무엇을 받고 무엇을 리턴하는지 주석에만 의존
- IDE 지원 부족: 자동완성이 거의 작동하지 않음
- 버그 폭발: 코드가 커질수록 기하급수적으로 증가하는 런타임 오류
기존 해결책들의 실패
구글과 마이크로소프트는 각자의 방식으로 이 문제를 해결하려 했습니다:
Google Closure Compiler (2009)
JSDoc 주석으로 타입 정보 추가. 하지만 문법이 복잡하고 채택률 저조
CoffeeScript (2009)
더 나은 문법으로 자바스크립트로 컴파일. 하지만 여전히 타입 문제는 미해결
Dart (2011)
구글의 완전히 새로운 언어. 하지만 생태계를 버리고 새로 시작해야 함
모든 시도들은 공통된 문제가 있었습니다: 기존 자바스크립트 생태계와의 단절.
Chapter 2: 안더스 하일스베르그의 마이다스의 손
프로그래밍 언어의 거장
안더스 하일스베르그(Anders Hejlsberg). 이 이름을 들어본 적이 있나요? 프로그래밍 역사상 가장 영향력 있는 언어 설계자 중 한 명입니다:
안더스 하일스베르그의 전설적 커리어
그가 만진 언어는 모두 성공했다
Turbo Pascal (1980년대):
- Borland의 전설적인 컴파일러
- Pascal을 대중화시킨 주역
Delphi (1990년대):
- Windows 개발의 표준 도구
- RAD (Rapid Application Development) 혁명
C# (2000년대):
- .NET 플랫폼의 핵심 언어
- Java의 강력한 대항마
"나는 항상 개발자들이 더 생산적이 되도록 돕는 도구를 만들고 싶었다. 타입스크립트는 자바스크립트 개발자들에게 정적 타입 검사의 이점을 가져다줄 것이다."
2010년, 마이크로소프트의 고민
마이크로소프트는 심각한 문제에 직면했습니다. 내부의 대규모 웹 애플리케이션들(Office 365, Bing 등)이 자바스크립트로 작성되고 있었는데, 코드베이스가 수십만 줄을 넘어가면서 유지보수가 불가능해졌습니다.
// Microsoft의 실제 상황 (2010년경)
// Office Web Apps 코드베이스: 수십만 줄
function formatDocument(doc, options) {
// 이 함수는 뭘 받고 뭘 리턴하나?
// 1000줄 아래에서 사용할 때 아무도 기억 못함
// options에 어떤 속성이 있어야 하나?
if (options.format === 'pdf') {
// ...
}
// doc 객체는 어떤 메서드를 가지고 있나?
doc.save(); // 이게 존재하긴 하나?
}
안더스 하일스베르그는 결심했습니다: "자바스크립트에 타입 시스템을 더하자. 하지만 자바스크립트를 버리지 말자."
타입스크립트의 탄생 (2012년)
2012년 10월, 마이크로소프트는 타입스크립트를 공개했습니다. 반응은 극명하게 갈렸습니다:
회의론자들:
- "또 마이크로소프트가 웹 표준을 망치려고 하는군"
- "자바스크립트에 타입을 더한다고? 그럼 자바스크립트가 아니잖아"
- "어차피 실패할 거야. Dart처럼"
지지자들:
- "드디어! IDE가 제대로 작동할 수 있겠어"
- "C#의 아버지가 만들었다면 믿을 만하다"
- "대규모 프로젝트가 관리 가능해지겠다"
Chapter 3: 점진적 타입 시스템 - 타입스크립트의 천재성
핵심 철학: 자바스크립트는 타입스크립트다
타입스크립트의 가장 중요한 설계 결정은 이것이었습니다:
모든 JavaScript는 유효한 TypeScript다// 이것은 유효한 자바스크립트
function add(a, b) {
return a + b;
}
// 그리고 이것도 유효한 타입스크립트
// .js를 .ts로 바꾸기만 하면 됨!
이는 혁명적인 접근법이었습니다. 다른 경쟁자들과 완전히 다른 전략이었죠:
타입스크립트 vs 경쟁자들
근본적으로 다른 접근 방식
Dart:
- 새로운 언어 → 생태계를 처음부터 다시 구축해야 함
- 기존 라이브러리 사용 불가
CoffeeScript:
- 다른 문법 → 팀 전체가 새로운 문법 학습 필요
- 디버깅 시 컴파일된 JS 코드 확인 필요
TypeScript:
- 자바스크립트의 상위집합 → 점진적 도입 가능
- 기존 라이브러리 그대로 사용 가능
- 타입을 원하는 만큼만 추가
점진적 타입 시스템의 마법
타입스크립트는 점진적(Gradual) 타입 시스템을 채택했습니다:
1단계: 기존 JS 코드 그대로
확장자만 .ts로 변경. 타입 없이도 작동함
2단계: 중요한 부분만 타입 추가
API 경계나 핵심 함수에만 타입 명시
3단계: 점차 타입 커버리지 확대
시간을 두고 천천히 타입 추가
4단계: 엄격 모드로 전환
준비되면 strict 모드로 완전한 타입 안전성 확보
// 1단계: 기존 자바스크립트 그대로
function calculateTotal(items) {
return items.reduce((sum, item) => sum + item.price, 0);
}
// 2단계: 매개변수에만 타입 추가
function calculateTotal(items: any[]) {
return items.reduce((sum, item) => sum + item.price, 0);
}
// 3단계: 구체적인 타입 정의
interface Item {
price: number;
name: string;
}
function calculateTotal(items: Item[]): number {
return items.reduce((sum, item) => sum + item.price, 0);
}
// 4단계: 완전한 타입 안전성
function calculateTotal(items: readonly Item[]): number {
return items.reduce((sum, item) => sum + item.price, 0);
}
// 이제 이런 실수는 컴파일 타임에 잡힘!
calculateTotal(null); // ❌ 컴파일 오류
calculateTotal([{ price: "200" }]); // ❌ 컴파일 오류
구조적 타입 시스템 (Structural Typing)
타입스크립트의 또 다른 천재성은 구조적 타입 시스템입니다. 이는 자바스크립트의 유연성을 해치지 않으면서도 타입 안전성을 제공합니다.
// Java나 C#의 명목적(Nominal) 타입 시스템이었다면
class Person {
name: string;
age: number;
}
class Employee {
name: string;
age: number;
}
// 이것은 오류가 됨 (다른 클래스)
let person: Person = new Employee(); // ❌ in Java/C#
// 하지만 TypeScript는 구조가 같으면 호환됨
let person: Person = new Employee(); // ✅ TypeScript에서는 OK!
// 더 나아가, 명시적 클래스 없이도 작동
interface Person {
name: string;
age: number;
}
// 이것도 Person 타입으로 인정됨
const person = { name: "김철수", age: 30 };
function greet(p: Person) {
console.log(`안녕하세요, ${p.name}님`);
}
greet(person); // ✅ 완벽하게 작동
왜 구조적 타입 시스템인가?
자바스크립트는 **덕 타이핑(Duck Typing)**을 사용합니다: "오리처럼 걷고, 오리처럼 운다면, 그것은 오리다."
타입스크립트는 이 철학을 존중했습니다. 형식적인 상속 관계보다 실제 구조를 중요시하는 것이 자바스크립트의 본질에 더 맞았기 때문입니다.
타입 추론의 마법
타입스크립트는 놀라운 타입 추론(Type Inference) 능력을 가지고 있습니다:
// 타입을 명시하지 않아도 자동으로 추론됨
let message = "안녕하세요"; // string으로 추론
let count = 42; // number로 추론
let items = [1, 2, 3]; // number[]로 추론
// 함수 리턴 타입도 추론
function add(a: number, b: number) {
return a + b; // number를 리턴한다고 자동 추론
}
// 복잡한 제네릭도 추론
const numbers = [1, 2, 3];
const doubled = numbers.map(n => n * 2); // number[]로 추론
// 심지어 조건부 타입도 추론
function process<T>(value: T) {
if (typeof value === "string") {
// 이 블록 안에서는 value가 string으로 좁혀짐
return value.toUpperCase();
}
return value;
}
"좋은 타입 시스템은 명시적일 때와 암묵적일 때를 알아야 한다. 개발자가 타이핑을 덜 하면서도 더 많은 안전성을 얻어야 한다."
Chapter 4: 생태계의 정복 - Angular, Vue의 TS 전향
2014년, Angular 2의 결정
타입스크립트의 첫 번째 큰 승리는 Angular 2였습니다.
구글의 Angular 팀은 AngularJS를 완전히 재작성하기로 결정했습니다. 그리고 놀랍게도 타입스크립트를 선택했습니다. 구글이 자체 언어인 Dart를 제쳐두고 말이죠.
Angular 2가 TypeScript를 선택한 이유
구글이 경쟁사의 기술을 채택한 순간
대규모 애플리케이션 지원:
- Angular는 엔터프라이즈급 앱을 타겟으로 함
- 타입 안전성이 필수적
개발자 도구 지원:
- IDE 자동완성, 리팩토링 지원
- 생산성 향상
ECMAScript 호환성:
- 미래의 자바스크립트 기능 미리 사용 가능
- 데코레이터, 제네릭 등
// Angular 2의 타입스크립트 활용
import { Component } from '@angular/core';
@Component({
selector: 'app-user',
template: `
<h1>{{ user.name }}</h1>
<p>{{ user.email }}</p>
`
})
export class UserComponent {
user: User = {
name: '김철수',
email: 'kim@example.com'
};
updateUser(newUser: User): void {
this.user = newUser;
// 타입 안전성 보장!
}
}
interface User {
name: string;
email: string;
}
Angular 2의 영향
Angular 2가 타입스크립트를 채택하면서, 타입스크립트는 주류 기술이 되었습니다. 구글이라는 거대 기업의 보증이 붙은 것이죠.
2015-2017년, 프론트엔드 프레임워크의 도미노
Angular 2의 성공을 본 다른 프레임워크들도 타입스크립트 지원을 강화했습니다:
React (2015년)
DefinitelyTyped를 통한 타입 정의 제공. 2016년부터 공식 타입 지원 강화
Vue 2 (2016년)
타입스크립트 지원 추가. 하지만 완전하지는 않음
Vue 3 (2020년)
내부를 타입스크립트로 완전히 재작성. 일급 시민 대우
// Vue 3의 타입스크립트 지원
import { defineComponent, ref, computed } from 'vue';
interface Todo {
id: number;
text: string;
done: boolean;
}
export default defineComponent({
setup() {
const todos = ref<Todo[]>([]);
const completedCount = computed(() => {
return todos.value.filter(t => t.done).length;
});
const addTodo = (text: string): void => {
todos.value.push({
id: Date.now(),
text,
done: false
});
};
// 완벽한 타입 추론과 자동완성!
return { todos, completedCount, addTodo };
}
});
2020년, 승부의 종료
2020년경, 타입스크립트는 사실상 프론트엔드 개발의 표준이 되었습니다.
타입스크립트 채택률 (2020년)
압도적인 승리
State of JS 설문조사:
- 93% 만족도
- 78% "계속 사용하겠다"
- "자바스크립트 맛" 부문 압도적 1위
주요 기업들의 채택:
- Google (Angular, Google Cloud)
- Microsoft (VSCode, Office 365)
- Facebook (일부 프로젝트)
- Airbnb, Slack, Spotify 등
NPM 다운로드:
- 2015년: 주간 60만 다운로드
- 2020년: 주간 2,500만 다운로드
- 40배 이상 성장!
Chapter 5: 타입스크립트의 철학 - 왜 그런 형태가 되었는가
철학 1: "JavaScript의 상위집합"
타입스크립트의 첫 번째 원칙은 명확했습니다:
"타입스크립트는 자바스크립트의 상위집합이어야 한다. 모든 자바스크립트 코드는 유효한 타입스크립트 코드여야 한다."
이는 전략적 결정이었습니다:
// Dart 같은 경쟁자들의 접근
// → 새로운 언어 = 새로운 학습 곡선 = 채택 장벽
// TypeScript의 접근
// → 자바스크립트 개발자라면 이미 80%는 아는 상태
// → 나머지 20%만 배우면 됨
이 철학의 결과
- 점진적 도입: 기존 프로젝트에 파일 하나씩 전환 가능
- 낮은 학습 곡선: JS 개발자라면 하루면 시작 가능
- 생태계 호환성: NPM의 수백만 패키지 그대로 사용
철학 2: "컴파일 타임 타입 체크"
타입스크립트는 런타임 오버헤드가 없습니다. 모든 타입 정보는 컴파일 시점에만 존재하고, 컴파일 후에는 순수한 자바스크립트가 됩니다.
// TypeScript 코드
interface User {
name: string;
age: number;
}
function greet(user: User): string {
return `안녕하세요, ${user.name}님!`;
}
// 컴파일 후 JavaScript 코드
function greet(user) {
return `안녕하세요, ${user.name}님!`;
}
// 타입 정보는 완전히 사라짐!
이는 의도적인 설계 결정이었습니다:
성능 오버헤드 제로
런타임에 타입 체크를 하지 않으므로 성능 저하 없음
기존 JS 런타임 활용
Node.js, 브라우저 등 어디서든 실행 가능
점진적 도입 가능
일부만 타입스크립트로 전환해도 문제없음
런타임 타입 체크의 부재
이것은 장점이자 단점입니다. 타입스크립트는 컴파일 타임에만 안전성을 보장합니다. 외부 API로부터 받은 데이터는 여전히 런타임 검증이 필요합니다.
// 컴파일은 통과하지만 런타임 오류 가능
async function getUser(id: number): Promise<User> {
const response = await fetch(`/api/users/${id}`);
return response.json(); // 실제로 User 타입인지 보장 안 됨!
}
철학 3: "타입 추론 최대화"
타입스크립트는 개발자가 최소한의 타이핑으로 최대한의 타입 안전성을 얻도록 설계되었습니다.
// 명시적 타입 없이도 완벽한 타입 추론
const numbers = [1, 2, 3, 4, 5];
// map의 매개변수 n은 자동으로 number로 추론
const doubled = numbers.map(n => n * 2);
// filter 후에는 배열 타입이 좁혀짐
const evenNumbers = numbers.filter(n => n % 2 === 0);
// 체이닝도 완벽하게 추론
const result = numbers
.filter(n => n > 2) // number[]
.map(n => n * 2) // number[]
.reduce((a, b) => a + b, 0); // number
철학 4: "실용주의 vs 완벽주의"
타입스크립트는 실용주의를 선택했습니다. 이론적으로 완벽한 타입 시스템보다, 실제 자바스크립트 코드를 잘 표현하는 타입 시스템을 만들었습니다.
// 자바스크립트의 동적 특성을 표현하는 고급 타입들
// 1. Union Types: 여러 타입 중 하나
type Status = "loading" | "success" | "error";
// 2. Conditional Types: 조건부 타입
type NonNullable<T> = T extends null | undefined ? never : T;
// 3. Mapped Types: 타입 변환
type Readonly<T> = {
readonly [P in keyof T]: T[P];
};
// 4. Template Literal Types: 문자열 패턴
type EventName = `on${Capitalize<string>}`; // "onClick", "onHover" 등
"우리는 자바스크립트의 유연성을 제한하는 것이 아니라, 그 유연성을 안전하게 표현할 방법을 제공하고자 했다."
Chapter 6: 타입스크립트가 바꾼 것들
개발자 경험의 혁명
타입스크립트는 **개발자 경험(DX)**을 근본적으로 바꿨습니다:
타입스크립트 이전 vs 이후
일상적인 개발 경험의 변화
자동완성:
- 이전: 함수 이름을 정확히 기억해야 함
- 이후:
.만 누르면 사용 가능한 메서드 목록 표시
리팩토링:
- 이전: 전체 검색 후 수동 수정 (실수 가능성 높음)
- 이후: "Rename Symbol" 한 번으로 모든 곳에서 안전하게 변경
오류 발견:
- 이전: 런타임에서 발견 (프로덕션에서 발견될 수도)
- 이후: 타이핑하는 순간 IDE에서 빨간 줄로 표시
문서화:
- 이전: 별도 문서나 주석에 의존
- 이후: 타입 자체가 살아있는 문서
대규모 프로젝트의 가능성
타입스크립트는 수십만 줄의 자바스크립트 프로젝트를 관리 가능하게 만들었습니다:
// 수백 개 파일로 나뉜 대규모 프로젝트도 안전
// src/types/user.ts
export interface User {
id: string;
name: string;
email: string;
role: 'admin' | 'user' | 'guest';
}
// src/services/userService.ts
import { User } from '../types/user';
export class UserService {
async getUser(id: string): Promise<User> {
// 구현...
}
async updateUser(user: User): Promise<void> {
// User 타입이 변경되면 여기도 자동으로 체크됨
}
}
// src/components/UserProfile.tsx
import { User } from '../types/user';
import { UserService } from '../services/userService';
function UserProfile({ userId }: { userId: string }) {
// 타입 안전성이 전체 애플리케이션을 관통함
const [user, setUser] = useState<User | null>(null);
// User 인터페이스를 변경하면
// 이 파일이 1000개 파일 밖에 있어도 오류를 즉시 발견
}
오픈소스 생태계의 변화
타입스크립트는 npm 생태계 전체를 변화시켰습니다:
DefinitelyTyped의 등장
커뮤니티가 JS 라이브러리의 타입 정의를 공유하는 거대한 저장소
라이브러리의 TS 전환
주요 라이브러리들이 타입스크립트로 재작성되기 시작
타입 우선 개발
새로운 라이브러리는 기본적으로 타입스크립트로 작성됨
// 2015년: 타입 정의를 별도로 설치
npm install lodash
npm install @types/lodash
// 2024년: 대부분의 라이브러리가 타입 포함
npm install zod // 타입이 내장됨
Chapter 7: 현재와 미래
2024년, 타입스크립트의 현주소
타입스크립트는 더 이상 선택이 아닌 표준이 되었습니다:
타입스크립트 현황 (2024)
압도적인 시장 점유율
State of JS 2023:
- 사용률: 84%
- 만족도: 93%
- "다시 사용하겠다": 88%
GitHub 언어 순위:
- 전체 4위 (JavaScript, Python, Java 다음)
- 프론트엔드 분야에서는 사실상 1위
채용 시장:
- 프론트엔드 개발자 채용 공고의 90% 이상이 TS 요구
- "TypeScript 경험" = 필수 스킬
새로운 혁신들
타입스크립트는 계속 진화하고 있습니다:
// TypeScript 5.0+의 최신 기능들
// 1. const 타입 매개변수
function makeTuple<const T>(arg: T) {
return [arg] as const;
}
const tuple = makeTuple("hello"); // readonly ["hello"]
// 2. Decorators (Stage 3)
function log(target: any, key: string) {
console.log(`${key} was called`);
}
class Service {
@log
getData() {
return "data";
}
}
// 3. 향상된 타입 추론
const config = {
host: "localhost",
port: 3000,
} as const;
// config.port는 3000 타입 (number가 아니라!)
타입스크립트의 영향
타입스크립트는 다른 언어들에도 영향을 미쳤습니다:
Python (Type Hints)
PEP 484로 타입 힌트 추가. TypeScript에서 영감을 받음
PHP (Typed Properties)
PHP 7.4+에서 프로퍼티 타입 지원 강화
Ruby (RBS, Sorbet)
타입 시스템 도입 시도
JavaScript (JSDoc)
JSDoc이 TypeScript 타입 정의를 참조하도록 진화
에필로그: 날개를 단 자바스크립트
우연이 아닌 필연
타입스크립트의 성공은 우연이 아니었습니다:
타입스크립트 성공의 요인
기술적 탁월함:
- 점진적 타입 시스템
- 뛰어난 타입 추론
- 구조적 타이핑
전략적 선택:
- 자바스크립트 생태계 존중
- 점진적 도입 가능
- 런타임 오버헤드 제로
타이밍:
- 대규모 JS 앱이 늘어나는 시점
- 프레임워크들의 성숙기
- 개발 도구의 발전
리더십:
- 안더스 하일스베르그의 경험
- 마이크로소프트의 오픈소스 전환
- 커뮤니티 중심 개발
자바스크립트에게 날개를
2012년, 자바스크립트는 장난감 언어라는 편견에 시달렸습니다. 2024년, 자바스크립트(와 타입스크립트)는 전 세계에서 가장 많이 사용되는 언어가 되었습니다.
타입스크립트는 자바스크립트를 대체하지 않았습니다. 날개를 달아주었습니다.
// 10년 전, 이런 코드는 유지보수 악몽이었음
function processData(data) {
return data.items
.filter(item => item.active)
.map(item => item.value)
.reduce((sum, val) => sum + val, 0);
}
// 지금은 안전하고 명확함
interface Item {
active: boolean;
value: number;
name: string;
}
interface Data {
items: Item[];
}
function processData(data: Data): number {
return data.items
.filter(item => item.active)
.map(item => item.value)
.reduce((sum, val) => sum + val, 0);
}
// IDE가 모든 단계를 이해하고 도와줌
// 실수하면 즉시 알려줌
// 리팩토링도 안전함
"만약 Node.js를 지금 다시 만든다면, 처음부터 타입스크립트로 만들 것이다. 타입스크립트는 자바스크립트가 꿈꿨던 모습이다."
미래를 향해
타입스크립트의 여정은 계속됩니다:
- ECMAScript와의 협력: TC39와 협력하여 표준에 영향
- 성능 최적화: 대규모 프로젝트의 컴파일 속도 개선
- 타입 시스템 진화: 더 표현력 높은 타입들
- 도구 생태계: VSCode, ESLint, Prettier 등과의 통합 강화
자바스크립트는 브렌든 아이크가 10일 만에 만든 언어입니다. 타입스크립트는 그 언어에 12년에 걸쳐 날개를 달아준 언어입니다.
그리고 이 날개는 아직도 계속 자라고 있습니다.
참고자료
다음 에피소드에서는 "러스트: 메모리 안전성 혁명"을 다룰 예정입니다. C/C++의 성능과 안전성 딜레마를 어떻게 해결했는지 살펴보겠습니다.