타입 수준 덧셈과 뺄셈
튜플 조작으로 산술 연산을 구축합니다.
타입 수준 덧셈과 뺄셈은(는) CoddyKit의 무료 TypeScript Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 TypeScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
길이를 이용한 산술
튜플 길이 표현을 사용하면 덧셈은 연결이 되고 뺄셈은 접두부 제거가 됩니다. 튜플에서 계산한 다음 결과 길이를 읽습니다.
type BuildTuple<N extends number, Acc extends unknown[] = []> =
Acc["length"] extends N ? Acc : BuildTuple<N, [...Acc, unknown]>;덧셈
A + B를 더하려면 길이 A인 튜플과 길이 B인 튜플을 만들고, 두 튜플을 새 튜플에 펼쳐 넣은 다음 길이를 읽습니다.
type Add<A extends number, B extends number> =
[...BuildTuple<A>, ...BuildTuple<B>]["length"];
type S = Add<3, 4>; // 7연결하면 더해지는 이유
길이 3인 튜플 뒤에 길이 4인 튜플을 연결하면 길이 7인 튜플이 됩니다. 두 개수 표시의 표시를 합치면 하나의 전체 개수 표시가 되므로 길이가 더해집니다.
type A = Add<2, 2>; // 4
type B = Add<0, 5>; // 5
type C = Add<1, 6>; // 7접두부를 이용한 뺄셈
A - B를 계산하려면 길이 A인 튜플을 만든 다음, 이를 길이 B인 접두부와 나머지 부분으로 추론합니다. rest의 길이는 A - B입니다.
type Sub<A extends number, B extends number> =
BuildTuple<A> extends [...BuildTuple<B>, ...infer Rest]
? Rest["length"]
: never;
type D = Sub<7, 4>; // 3뺄셈 따라가기
Sub<7, 4>의 경우 길이 7인 튜플을 만들고, 길이 4인 접두부와 일치시킨 뒤 Rest를 추출합니다. 그 길이는 3이며, 이 값을 읽습니다. 제거된 접두부는 정확히 B개의 표시입니다.
type A = Sub<5, 2>; // 3
type B = Sub<4, 4>; // 0언더플로는 never를 반환합니다
여기서 타입 수준 숫자는 음이 아닌 값입니다. B > A이면 유효한 접두부가 없으므로 패턴이 실패하고 결과는 never가 됩니다. 원한다면 이를 0으로 대체할 수 있습니다.
type A = Sub<2, 5>; // never
type SubSafe<A extends number, B extends number> =
[Sub<A, B>] extends [never] ? 0 : Sub<A, B>;
type B = SubSafe<2, 5>; // 0증가와 감소
1만큼 더하고 빼는 특수한 경우는 이름을 붙여 사용할 만큼 자주 쓰입니다. Inc는 요소 하나를 추가하고, Dec는 요소 하나를 제거합니다.
type Inc<N extends number> = [...BuildTuple<N>, unknown]["length"];
type Dec<N extends number> =
BuildTuple<N> extends [unknown, ...infer R] ? R["length"] : 0;
type A = Inc<4>; // 5
type B = Dec<4>; // 3반복을 이용한 곱셈
곱셈은 반복되는 덧셈입니다. Dec로 횟수를 줄여 가며 Add로 누산하는 방식으로, 누산기에 B를 A번 더합니다.
type Mul<A extends number, B extends number, Acc extends number = 0> =
A extends 0 ? Acc : Mul<Dec<A>, B, Add<Acc, B>>;
type A = Mul<3, 4>; // 12BuildTuple 도우미
여기서 다루는 모든 연산은 BuildTuple에 의존합니다. 숫자를 받아 그 길이의 튜플을 반환하는, 재사용 가능한 단일 기본 연산입니다. 한곳에 두고 나머지 연산은 그 위에 구축하세요.
type Five = BuildTuple<5>; // [unknown, unknown, unknown, unknown, unknown]
type N = Five["length"]; // 5연산 조합하기
각 연산이 숫자를 받아 숫자를 반환하므로 자유롭게 조합할 수 있습니다. Add<Mul<2, 3>, 4>와 같은 표현식을 작성하면 컴파일러가 이를 계산합니다.
type Result = Add<Mul<2, 3>, 4>; // 10실용적인 주의 사항
이 기법은 배열 인덱스, 고정된 크기, 제한된 범위처럼 개수가 작은 경우에 유용합니다. 큰 숫자나 일반적인 수학에는 재귀 제한과 음수를 지원하지 않는 문제 때문에 실용적이지 않습니다. 값이 작고 정적으로 유지되는 곳에서 사용하세요.
type A = Add<8, 7>; // 15 (fine)
// Add<5000, 5000> would exceed recursion limits빠른 확인
타입 수준 산술을 제대로 이해했는지 테스트해 보세요.
복습
타입 시스템에서 산술을 구현했습니다.
- Add: 튜플을 연결하고 길이를 읽습니다.
- Sub: 접두부를 추론하고 나머지 길이를 읽습니다.
Inc/Dec는 한 단계씩 처리하는 버전입니다.BuildTuple은 공통으로 사용하는 기본 연산입니다.
다음: 타입 수준에서 숫자 비교하기입니다.
자주 묻는 질문
“타입 수준 덧셈과 뺄셈” 강의는 무료인가요?
네 — “타입 수준 덧셈과 뺄셈” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 튜플 길이로 세기
- 타입 수준 덧셈과 뺄셈
- 타입 수준 비교
- 실용적인 숫자 타입 유틸리티