커링(Currying)은 함수의 일부 파라미터를 고정하여 더 적은 개수의 파라미터를 받는 새로운 함수를 생성하는 개념입니다. 이를 통해 함수를 팩토리로 활용할 수 있습니다. 팩토리는 생성자 함수를 호출하여 객체를 생성하는 과정을 추상화한 함수입니다. 자바스크립트에서 Currying을 사용하면, 동적인 파라미터를 받는 팩토리 함수를 만들 수 있습니다.
아래는 자바스크립트에서 Currying을 사용하여 함수를 팩토리로 활용하는 예시 코드입니다.
// 고정된 파라미터를 받는 Currying 함수
const curry = (fn, ...args) => {
if (args.length >= fn.length) {
return fn(...args);
}
return (...moreArgs) => curry(fn, ...args, ...moreArgs);
}
// 객체를 생성하는 팩토리 함수
const createUser = (name, age, gender) => {
return {
name,
age,
gender
};
}
// Currying을 사용하여 객체 생성을 추상화한 팩토리 함수 생성
const curriedCreateUser = curry(createUser);
// 추상화된 팩토리 함수를 사용하여 객체 생성
const user1 = curriedCreateUser('John')(25)('male');
const user2 = curriedCreateUser('Emily')(30)('female');
console.log(user1); // { name: 'John', age: 25, gender: 'male' }
console.log(user2); // { name: 'Emily', age: 30, gender: 'female' }
위 예시 코드에서 curry
함수는 Currying을 구현한 함수입니다. 이 함수는 인자로 받은 함수 fn
과 ...args
를 결합하여 새로운 함수를 반환합니다. curry
함수는 args
의 길이가 fn
함수의 파라미터 개수보다 크거나 같을 경우에는 fn
함수를 호출하고, 그렇지 않을 경우에는 더 많은 인자를 받을 수 있는 새로운 함수를 반환합니다.
createUser
함수는 객체를 생성하는 팩토리 함수로, 이름, 나이, 성별을 인자로 받아 해당 속성들을 가진 객체를 반환합니다.
curriedCreateUser
함수는 createUser
함수를 Currying을 사용하여 추상화한 팩토리 함수입니다. 이 함수는 이름, 나이, 성별을 각각 하나의 인자로 받는 함수를 반환합니다. 이렇게 Currying을 사용하면 필요한 인자를 여러 번에 나누어 넣을 수 있으며, 가독성을 높일 수 있습니다.
위에서 curriedCreateUser
함수를 사용하여 user1
과 user2
객체를 생성하였습니다. curriedCreateUser('John')(25)('male')
은 이름이 ‘John’이고, 나이가 25이며, 성별이 ‘male’인 객체를 생성하는 것을 의미합니다. curriedCreateUser('Emily')(30)('female')
은 이름이 ‘Emily’이고, 나이가 30이며, 성별이 ‘female’인 객체를 생성하는 것을 의미합니다.
Currying을 사용하여 함수를 팩토리로 활용하면 쉽게 객체를 생성하는 추상화된 팩토리 함수를 구현할 수 있습니다. 이를 통해 코드의 가독성을 높이고, 유연하게 객체를 생성할 수 있습니다.
#Currying #함수팩토리