본문 바로가기

JavaScript/AboutJS

[JavsScript] 함수의 합성과 데이터 파이프라인 2: pipe - 재사용 가능한 함수 파이프라인 만들기

https://daunje0.tistory.com/173

 

[JavsScript] 함수의 합성과 데이터 파이프 라인 1. go

함수를 값으로 다룰 수 있다는 자바스크립트의 특성 ( 일급함수 ) 때문에정말 다채로운 표현이 가능한 데, 그걸 배우는 데에는 아래 강의가 개인적으로 최고이지 않을까 싶습니다. 참고 : 함수

daunje0.tistory.com

위 블로그에서 계속 됩니다.

 

go 함수는 즉시 실행되어 값을 리턴하는 함수였지만

지금 다룰 pipe 함수는 여러 개의 함수를 인자로 받아 새로운 함수를 반환합니다.

 

생성된 함수는 인자로 받은 함수들을 순차적으로 실행합니다.

 

  const go = (...args) => args.reduce((a, f) => f(a));
  const pipe = (...fs) => (a) => go(a, ...fs);

  const f = pipe(
    a => a + 1,
    a => a + 10,
    a => a + 100
  )

  console.log(f(0)) // 111

 

만약 입력값이 2개인 경우는 아래처럼 코드를 수정하면 됩니다.

  const go = (...args) => args.reduce((a, f) => f(a));
  const pipe = (f, ...fs) => (...args) => go(f(...args), ...fs);

  const f = pipe(
    (a,b) => a + b,
    a => a + 10,
    a => a + 100
  )

  console.log(f(0, 1)) // 111

 

 

go 와 pipe 의 차이점은 다음과 같습니다

  1. 실행 시점
    go: 즉시 실행됩니다. 인자로 받은 함수들을 바로 실행하고 결과를 반환합니다.
    pipe: 새로운 함수를 반환합니다. 이 함수는 나중에 호출될 때 실행됩니다.

  2. 사용 방식:
    go: 주로 일회성 연산에 사용됩니다. 데이터와 함수들을 한 번에 전달합니다.
    pipe: 재사용 가능한 함수를 만드는 데 사용됩니다. 함수들만 미리 조합해 놓고, 데이터는 나중에 전달합니다.

  3. 첫 번째 인자:
    go: 첫 번째 인자로 초기값을 받습니다.
    pipe: 첫 번째 인자도 함수입니다. 초기값은 반환된 함수를 호출할 때 전달됩니다.

  4. 유연성:
    go: 매번 다른 함수 조합을 사용할 수 있어 유연합니다.
    pipe: 미리 정의된 함수 조합을 여러 번 재사용할 수 있어 효율적입니다.

  5. 코드 구조:
    go: 주로 즉시 실행되는 연산을 표현할 때 사용되어 코드가 더 명시적일 수 있습니다.
    pipe: 함수를 정의하는 부분과 실행하는 부분이 분리되어 있어 코드 구조화에 도움이 될 수 있습니다.

 

다음 글:

https://daunje0.tistory.com/175

 

[JavsScript] 함수의 부분 적용과 유연한 합성 3: curry - 인자를 유연하게 다루는 고차 함수 만들기

https://daunje0.tistory.com/174 [JavsScript] 함수의 합성과 데이터 파이프라인 2: pipe - 재사용 가능한 함수 파이프라인 만들기https://daunje0.tistory.com/173 [JavsScript] 함수의 합성과 데이터 파이프 라인 1. go함

daunje0.tistory.com