티스토리 뷰

FRONT/javascript

Curry pattern

성젼이 2024. 3. 6. 16:51

 

커리 패턴의 가장 중요한 쓰임새는 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(부분)을 반환하여 사용하기도 한다.

 

 

참고 : https://ko.javascript.info/currying-partials

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함