커링과 부분 적용
여러 인수를 받는 함수를 커링 형태로 변환합니다.
커링과 부분 적용은(는) CoddyKit의 무료 TypeScript Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 TypeScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
커링이란 무엇인가요
커링은 여러 인수를 받는 함수를 인수 하나씩 받는 함수의 연쇄로 변환합니다. f(a, b) 대신 f(a)(b)와 같이 호출합니다.
대표적인 예시
여기서 add는 숫자 하나를 받고 다음 숫자를 기다리는 함수를 반환합니다. TypeScript는 중첩된 함수의 타입을 자동으로 추론합니다.
const add = (a: number) => (b: number) => a + b;
console.log(add(2)(3)); // 5커링된 함수에 타입 지정하기
명시적인 타입을 보면 함수가 함수를 반환하는 연쇄 구조가 분명하게 드러납니다. 각 화살표는 하나의 인수에 대응합니다.
type Add = (a: number) => (b: number) => number;
const add: Add = a => b => a + b;
console.log(add(10)(5)); // 15부분 적용
부분 적용은 일부 인수를 지금 고정하고 나머지는 나중에 제공합니다. 커링된 함수에서는 더 적은 단계로 호출하는 것만으로 부분 적용이 이루어집니다.
const add = (a: number) => (b: number) => a + b;
const add10 = add(10); // partially applied
console.log(add10(1), add10(2)); // 11 12부분 적용이 도움이 되는 이유
일반적인 함수에서 특화된 함수를 만들 수 있습니다. add10은 일반적인 add에서 파생된 재사용 가능하고 이름이 있는 도구이므로 가독성과 재사용성이 향상됩니다.
세 인수 커링하기
이 패턴은 인수의 개수와 관계없이 확장됩니다. 최종 값이 생성될 때까지 각 단계가 클로저에 인수 하나를 저장합니다.
const clamp = (min: number) => (max: number) => (x: number) =>
Math.min(Math.max(x, min), max);
const toByte = clamp(0)(255);
console.log(toByte(300), toByte(-5)); // 255 0map과 filter에 적합합니다
커링된 함수는 배열 메서드에 자연스럽게 연결됩니다. map이 인수 하나를 받는 함수를 필요로 하기 때문입니다. 부분 적용은 정확히 그런 함수를 만들어 줍니다.
const mul = (a: number) => (b: number) => a * b;
const triple = mul(3);
console.log([1, 2, 3].map(triple)); // [3, 6, 9]제네릭 커링 도우미
두 인수를 받는 함수를 커링하는 타입이 지정된 도우미를 작성할 수 있습니다. 제네릭을 사용하면 매개변수와 반환 타입을 정확하게 유지할 수 있습니다.
function curry2<A, B, R>(f: (a: A, b: B) => R) {
return (a: A) => (b: B) => f(a, b);
}
const join = curry2((a: string, b: string) => a + b);
console.log(join("foo")("bar")); // foobar클로저가 인수를 캡처합니다
커링이 작동하는 이유는 반환되는 각 함수가 이전 인수를 클로저로 감싸기 때문입니다. 최종 호출에서 사용될 때까지 해당 값은 유지됩니다.
const greet = (greeting: string) => (name: string) =>
greeting + ", " + name;
const hi = greet("Hi");
console.log(hi("Sam")); // Hi, Sam커링을 사용하지 않을 때
모든 함수에 커링을 적용하면 가독성이 떨어질 수 있습니다. 재사용 가능한 도우미를 구성하거나 처리 흐름을 조합하는 등 부분 적용이 실제로 유용할 때 사용하십시오.
커링과 기본 인수 비교
기본 매개변수는 기본값을 제공하지만 단계적인 적용은 제공하지 않습니다. 커링은 진정한 부분 적용을 제공하여 전달하고 재사용할 수 있는 실제 함수를 반환합니다.
간단 확인
이 레슨을 간단히 확인해 보겠습니다.
복습
커링은 f(a, b)를 f(a)(b)로 바꿉니다. 이는 중첩 화살표로 타입이 지정된 한 인자 함수들의 연결입니다. 그런 다음 부분 적용으로 앞쪽 인자를 고정해 재사용 가능한 특화 함수를 만들며, 이 과정은 클로저로 동작합니다.
자주 묻는 질문
“커링과 부분 적용” 강의는 무료인가요?
네 — “커링과 부분 적용” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.