타입을 활용한 유창한 인터페이스
타입에서 누적 상태를 추적하며 메서드를 연결합니다.
타입을 활용한 유창한 인터페이스은(는) CoddyKit의 무료 TypeScript Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 TypeScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
설정된 항목 추적하기
일반 빌더에서는 필수 필드가 빠져 있어도 언제든 build()를 호출할 수 있습니다. 제네릭 타입 매개변수를 사용하여 타입 시스템에서 누적된 상태를 추적하면 더 나은 방법을 만들 수 있습니다.
상태 타입 매개변수
지금까지 어떤 키가 제공되었는지 기록하는 제네릭 S를 빌더에 부여합니다. 각 메서드가 실행될 때마다 새로운 키를 포함하도록 S의 범위를 넓힙니다.
class Builder<S> {
// S is a record of keys set so far, e.g. {} or { url: string }
private data: Record<string, unknown> = {};
}각 메서드가 키를 추가합니다
설정 메서드는 새로 추가된 키를 포함하는 새로운 타입의 빌더를 반환합니다. 실행 시점에는 값이 저장되고, 그에 따라 타입도 확장됩니다.
set<K extends string, V>(key: K, value: V): Builder<S & Record<K, V>> {
this.data[key] = value;
return this as unknown as Builder<S & Record<K, V>>;
}교차 타입 기법
S & Record<K, V> 표현식은 이전 상태와 새 키를 교차합니다. 두 번 호출하고 나면 타입이 두 키를 모두 정확하게 알게 됩니다.
type Empty = {};
type AfterUrl = Empty & Record<"url", string>;
type AfterBoth = AfterUrl & Record<"method", string>;
// AfterBoth = { url: string; method: string }구체적인 연쇄형 빌더
여기서는 요청 빌더가 호출될 때마다 누적된 구조를 다음 호출로 전달합니다. 컴파일러는 어떤 필드가 존재하는지 항상 정확히 알고 있습니다.
class Req<S> {
private d: Record<string, unknown> = {};
url(u: string): Req<S & { url: string }> {
this.d.url = u; return this as any;
}
method(m: string): Req<S & { method: string }> {
this.d.method = m; return this as any;
}
}연쇄 호출에 따라 타입이 확장됩니다
연쇄 호출의 각 호출은 더 구체적인 빌더 타입을 만듭니다. 편집기에서 결과 위에 마우스를 올리면 누적된 상태를 확인할 수 있습니다.
const partial = new Req<{}>().url("/x");
// type: Req<{ url: string }>
const full = partial.method("POST");
// type: Req<{ url: string; method: string }>상태를 추적하는 이유
타입에 제공된 키 집합이 포함되면, 나중에 필수 키가 모두 존재할 때만 build()가 컴파일되도록 제한할 수 있습니다. 상태 매개변수는 이러한 보장을 위한 기반입니다.
누적된 구조 읽기
누적된 구조를 추출하여 검사할 수 있습니다. 이를 통해 빌더의 타입이 실제로 설정된 항목을 정확히 반영하는지 확인할 수 있습니다.
type StateOf<T> = T extends Req<infer S> ? S : never;
type S1 = StateOf<Req<{ url: string }>>; // { url: string }실행 시점은 단순하게 유지됩니다
모든 복잡한 처리는 타입에 있습니다. 실행 시점에 각 설정 메서드는 객체에 값 하나를 저장할 뿐입니다. 형변환(as any)은 실행 시점의 객체와 더 풍부한 컴파일 시점 타입을 연결합니다.
const r = new Req<{}>().url("/users").method("GET");
console.log("configured url and method");원장으로서의 제네릭 상태
S를 지금까지 설정된 항목의 원장이라고 생각해 보십시오. 메서드는 항목을 추가하고, 빌드 단계에서는 나중에 이 원장을 읽어 객체를 생성해도 되는지 결정할 수 있습니다.
절충점
타입 수준의 상태 추적은 정확한 통합 개발 환경 피드백을 제공하고 완전하지 않은 빌드를 방지하지만, 몇 가지 형변환과 더 고급 제네릭이 필요합니다. 많은 사람이 사용하는 프로그래밍 인터페이스에서는 이러한 비용을 감수할 가치가 있습니다.
간단히 확인하기
이 수업을 간단히 확인합니다.
복습
연쇄형 타입 빌더는 제네릭 상태 매개변수 S를 전달합니다. 각 설정 메서드는 S와 새 키를 교차하고(S & Record<K, V>) 더 구체적인 빌더를 반환하므로, 컴파일러는 설정된 필드의 정확한 원장을 얻습니다.
자주 묻는 질문
“타입을 활용한 유창한 인터페이스” 강의는 무료인가요?
네 — “타입을 활용한 유창한 인터페이스” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 TypeScript Academy 강의 전체를 잠금 해제할 수 있습니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“타입을 활용한 유창한 인터페이스”에서 뭘 배우나요?
타입에서 누적 상태를 추적하며 메서드를 연결합니다. 브라우저에서 직접 실행하는 실습 코드로 TypeScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
TypeScript Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 TypeScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“타입을 활용한 유창한 인터페이스” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 TypeScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 TypeScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 빌더 패턴 기초
- 타입을 활용한 유창한 인터페이스
- 필수 단계 강제하기
- 불변 빌더