톨머프
387
2020-08-04 20:42:30
4
231

js 함수형 프로그래밍 순수함수


순수함수에 대한 질문이 있습니다.

순수함수면은 뭐가 들어오든 출력이 동일한 함수입니다. (외부에 영향을 주지 않고)

그런데 제 궁금증은 만약 순수함수에서 필요에 의해서 외부에 있는 함수를 호출했을 경우입니다.

그러면 외부에 있는 함수가 바뀌면 출력값이 바뀌니 순수함수가 아니게 되는데, 그것을 순수함수 내부에 동일하게 구현할 수도 없으면 어떻게 해야 순수함수로 만들 수 있는지 궁금합니다!

0
  • 답변 4

  • Frudy
    7k
    2020-08-04 21:41:02

    예시하나 주세요.

    말만들어서는 필요에 의해서 외부에 있는 함수를 호출했을 때가 무슨상황인지 모르겠어요.

  • 톨머프
    387
    2020-08-04 21:53:06 작성 2020-08-04 21:53:51 수정됨

    Frudy 

    const a = (number) => {
      return b(number)
    }
    
    const b = (number) => {
      console.log(number)
    }

    이러면은 b가 바뀌면 a가 순수함수가 아니게 되잖아요?? 이럴경우에 a를 어떤식으로 구현하는게 순수함수에 알맞는지 모르겠습니다... 클로저에 대해서도 알아봤는데 이런 경우는 못찾아서 감이 안오네요..

  • Frudy
    7k
    2020-08-04 22:04:34 작성 2020-08-04 22:08:07 수정됨

    음... 저도 잘못 생각해온거같아요. 답변 수정했어요.


    비슷한 상황에서 해결방법은 있습니다. a함수에서 callback함수를 받으면 되겠어요.


    const a = (number, func) => func(number); 이렇게 되겠네요.

  • jslovers
    2k
    2020-08-05 04:20:55 작성 2020-08-05 04:36:39 수정됨

    b가 순수함수가 아니라면 내부에서 b를 호출하지 말고

    아래처럼 순수함수의 반환된 결과를 b가 이용하는 것이 좋겠네요.

    b(a(number))


    개인적인 의견이지만 왠만하면 아래 같은 형태의 로직을 안 짤 것을 권장합니다.

    로직이 복잡해졌을 때, b가 새로운 함수 c,d,e...등을 같은 방식으로 꼬리를 물며 호출되하게면 수정이 발생하면 짜증나거나 헬을 맛볼 수 있습니다.

    const a = (number) => {
      return b(number)
    }
  • 로그인을 하시면 답변을 등록할 수 있습니다.