
안녕하세요 개발자 여러분,
잘 지내고 계시나요? 오늘은 JavaScript에서의 커링과 관련된 인터뷰 문제에 대해 이야기해보도록 하죠.
커링(Currying)이란 무엇인가요?
한 예시로 이해해봅시다:
function curriedFunction(a) {
// 이 함수는 단일 인수 'a'를 받아서 다른 함수를 반환합니다.
return function (b) {
// 반환된 함수는 단일 인수 'b'를 받아 다시 다른 함수를 반환합니다.
return function (c) {
// 가장 안쪽 함수는 단일 인수 'c'를 받아 'a', 'b', 'c'의 합을 반환합니다.
return a + b + c;
};
};
}
console.log(curriedFunction(1)(2)(3)); //출력: 6
/*
여기서 함수는 세 개의 인수를 하나씩 호출합니다.
먼저, curriedFunction(1)은 'b'를 기대하는 함수를 반환합니다.
그런 다음 반환된 함수가 (2)로 호출되어
'c'를 기대하는 또 다른 함수를 반환합니다.
마지막으로 마지막 함수가 (3)으로 호출되어
합인 1 + 2 + 3 = 6을 계산하고 반환합니다.
*/
면접 문제 1:
n개의 인수에 대한 커링 함수를 구현하고, 비어있는 인수로 호출했을 때 값을 반환하세요.
구현
const sumOfNumbers = (...args) => {
// 초기 인수는 'storage' 배열에 저장됩니다.
const storage = [...args];
// 인수가 제공되지 않은 경우, 합계로 0을 반환합니다.
if (storage.length === 0) {
return 0;
} else {
// 연이은 호출과 인수를 처리하는 'temp' 함수를 정의합니다.
const temp = function (...args2) {
// 새로운 인수(args2)를 'storage' 배열에 추가합니다.
storage.push(...args2);
// 현재 호출에서 인수가 전달되지 않은 경우 'storage' 배열을 합산하고 결과를 반환합니다.
if (args2.length === 0) {
return storage.reduce((a, b) => a + b, 0);
} else {
// 그렇지 않은 경우, 추가적인 연결을 위해 'temp' 함수 자체를 반환합니다.
return temp;
}
};
// 호출을 추가적으로 연결할 수 있도록 'temp' 함수를 반환합니다.
return temp;
}
};
console.log(sumOfNumbers(1)(2, 3)(2)(3)(4)(10)());
/* 연결 프로세스 설명:
1. sumOfNumbers(1)은 'storage'가 [1]로 초기화된 'temp' 함수를 반환합니다.
2. (2,3) => 'temp'가 이를 'storage'에 추가 => [1, 2, 3] 및 'temp' 반환.
3. (2) => 'temp'가 이를 'storage'에 추가 => [1, 2, 3, 2] 및 'temp' 반환.
4. (3) => 'temp'가 이를 'storage'에 추가 => [1, 2, 3, 2, 3] 및 'temp' 반환.
5. (4) => 'temp'가 이를 'storage'에 추가 => [1, 2, 3, 2, 3, 4] 및 'temp' 반환.
6. (10) => 'temp'가 이를 'storage'에 추가 => [1, 2, 3, 2, 3, 4, 10] 및 'temp' 반환.
7. () => 'temp'가 인수를 감지하지 못해 'storage'의 합계를 반환: 1 + 2 + 3 + 2 + 3 + 4 + 10 = 25.
*/
인터뷰 문제 2:→
이전 전달된 값 기억하여 이전 값과 현재 값의 합계를 반환하는 함수입니다.
구현
const sumOfPreviousAndCurrentValue = () => {
// 'sum'을 0으로 초기화합니다.
let sum = 0;
// 반환된 함수는 'num'이라는 숫자를 받아 'sum'에 추가합니다. 기본값은 0입니다.
return function (num = 0) {
sum += num;
return sum; // 업데이트된 'sum'을 반환합니다.
};
};
let sum = sumOfPreviousAndCurrentValue();
// 'sum'은 이제 누적 합을 계속 더할 수 있는 함수입니다.
console.log(sum(1)); // 첫 호출: 0 + 1 = 1, 따라서 1이 출력됩니다.
console.log(sum(4)); // 두 번째 호출: 1 + 4 = 5, 따라서 5가 출력됩니다.
위의 문제는 커링 기술에 대한 이해를 돕습니다.
질문이 있으면 댓글로 알려주세요. 이 스레드가 유익했다면 박수를 부탁드립니다.
저에게 커피 사줘:→ 링크
자바스크립트에 대해 더 배우고 싶다면 이 사이트를 방문해보세요.
링크드인에서 나를 팔로우하세요.
쉽게 설명한 것들 🚀
In Plain English 커뮤니티에 참여해 주셔서 감사합니다! 떠나시기 전에:
- 반드시 작가를 클립하고 팔로우하세요 👏
- 팔로우하기: X | LinkedIn | YouTube | Discord | Newsletter
- 다른 플랫폼 방문하기: CoFeed | Differ
- 더 많은 컨텐츠: PlainEnglish.io