As i wish

[JavaScript] Curry, Partial 차이 본문

JavaScript

[JavaScript] Curry, Partial 차이

어면태 2020. 2. 13. 11:49

함수형 프로그래밍에 대하여 접하면 대부분 사람들은 처음 배우는것이고 용어들도 많이 헷갈려한다.

저 또한 많이 헷갈렸는 데 그 중 Curry (커링), Partial (부분 적용?) 이 상당히 헷갈렸다.

그래서 잘 정리된 글 두개를 가져왔는데 하나는 영문이고 하나는 국문이다.

 

Javascript - Currying VS Partial Application

 

Javascript- Currying VS Partial Application

A lot of people get confused in between currying and partial application and many of us do not know what, where and when we should use…

towardsdatascience.com

 

함수형 프로그래밍 - Curry 와  Partial Application

 

함수형 프로그래밍 — Curry 와 Partial Application

이들은 대체 무엇이고 어떻게 사용할 수 있는가?

medium.com

 

두개의 내용은 비슷하나 내가 정리한 바로는

Curry

   - 하나의 인자만 받을 수 있는 함수를 계속 반환 한다.
   - 모든 인자를 다 받을 때 까지 계속해서 함수를 반환한다.
   - 계속해서 origin 한 함수를 반환한다.

Partial Application

   - 반환하는 함수가 꼭 한개의 인자를 받는 함수는 아니다.
   - 반환된 함수를 부를 때에는 결과값을 반환해야한다.
   - 반환된 함수는 origin한 함수랑 다르다.

 

공통점

   - 인자를 미리 정해 놓을 수 있다.

 

인자를 미리 정해놓을 수 있는 점은 상당히 메리트가 있다고 생각합니다. 예를 들어 통신을 할 때에 통신을 하는 함수가 모두 ajax 모듈을 사용한다고 가정하면 통신을 하는 함수를 partial 해서 ajax 모듈을 넣어주고 컴포넌트 단에서 부를 때에는 경로만 부르면 더 간단한 함수가 될 수 있기 때문이죠.

// 기존
const transform1 = (transformer, url) => {
    return transformer.get(url);
}

const transform2 = (transformer, url) => {
    return transformer.get(url);
}

const transform3 = (transformer, url) => {
    return transformer.get(url);
}

const res1 = transform1(ajax, '/user-info');
const res2 = transform2(ajax, '/posts');
const res3 = transform3(ajax, '/comments');

// partial Application 적용
const transform = (transformer, url) => {
    return transformer.get(url);
}

const transformPartial = partial(transform, ajax);

const res1 = transformPartial('/user-info');
const res2 = transformPartial('/posts');
const res3 = transformPartial('/comments');

 

조금 더 선언적 프로그래밍이 된 느낌입니다. transform 이라는 함수는 transformer 와 url을 받아서 get만 하는 역할을 선언하고 밑에서 partial을 이용하여 새로운 함수를 반환하였고 그 다음 반환된 함수를 사용하고 있습니다.

처음 프로그램이 실행 될 때 위와 같이 transformPartial이라는 함수를 만들고 컴포넌트 단에서는 transformPartial 함수 만 사용하면 조금 더 편하게 프로그램을 작성 할 수 있을 것 같네요.

Comments