커리 패턴의 가장 중요한 쓰임새는 partially(부분적인) 쓰임이 가능한 패턴이다.
**lodash 라이브러리(_.curry)**를 사용하면 편하게 쓰긴 하지만 구현한다고 해서 힘들지 않다.
기본 구현 방법
function curry(f) {
return function(a) {
return function(b) {
return function(c) {
return f(a, b, c)
}
}
}
}
function sum(a,b) {
return a + b
}
const curried = curry(sum)
curried(1)(2) // 3
function sum(a,b) {
return a + b
}
const curried = _.curry(sum)
curried(1,2) // 3 일반적인 호출
curried(1)(2) // 3 partially 호출
실제 이걸 왜 이렇게까지 쓰지? 란 생각을 하며 봤는데
앞서 기술되어있지만 커리 패턴은 부분적인 쓰임에 사용하는 것으로 보여진다.
예:
function log(timestamp, importance, message) {
console.log(timestamp, importance, message)
}
const curried = _.curry(log)
위 로직상 우리는 로그를 찍고 싶을 때 timestamp를 넣어야하는데 매번 넣어주기 귀찮다.
이럴때 커리패턴의 부분적 쓰임의 활용도가 높아진다.
const logNow = curried(new Date())
logNow('BUG')('test msg') // 날짜 BUG test msg
const InfoLog = logNow('INFO')
const bugLog = logNow('BUG')
infoLog('info msg'). // 날짜 INFO info msg
bugLog('bug msg') // 날짜 BUG bug msg
이런식으로 만들어졌다. 몇줄이지만 이로 인해서 구현부에서 잃을 것은 없다.
log를 그대로 쓸 수도 있기 때문이다.
좀더 다형성이 높아지는 것이 아닐까 싶다.
커링 적용하면 평소에도 일반적인 호출도 가능하고 partial(부분)을 반환하여 사용하기도 한다.
'FRONT > javascript' 카테고리의 다른 글
Proxy (0) | 2024.03.08 |
---|---|
자바스크립트 (기초편) (0) | 2022.04.29 |
자바스크립트 (쌩기초편🤷🏻♀️) (0) | 2022.04.29 |
숫자 카운팅 모션 (정한 숫자와 시간에 맞게 올라가는 모션) (0) | 2021.07.05 |
Youtube API 다중 동영상 제어 (0) | 2021.07.01 |