Skip to content

순수함수가 뭐길래 팀에서 사용하려 하는걸까?

Dia Lee edited this page Aug 1, 2019 · 1 revision

처음 순수함수라는 말을 들었을 때 혼란스러웠다. 기존함수에 무슨 문제가 있나? 왜 순수해야 하죠? 왜 순수함수까지 필요한 거죠?

어떤 순수함수이 있는지 이미 알고 있지 않다면 아마 같은 질문을 하고 있을 것이다. 사실 정말 간단하다.


그래서, 뭐가 순수함수인데?

순수함수의 정의는 다음과 같다.

  1. 함수는 동일한 인수를 전달하면 항상 동일한 결과를 반환한다. 함수실행 중에 변경되는 상태 또는 데이터에 종속되지 않는다. 인자에만 의존해야 합니다.
  2. 이 함수는 네트워크 요청, 입력 및 출력 장치 또는 데이터 돌연변이와 같은 관측 가능한 부작용을 생성하지 않는다.

순수함수는 이게 전부다. 위의 두 가지 요건을 통과하면 순수하다.

당신은 아마 과거에 깨닫지 못한 채 순수함수을 만들어냈을 것이다.

순수하고 불순한 기능의 예를 보여드리기 전에 무서운 side effect에 대해 소개한다.


Side effect는 뭘 바라보고 있을까?

관찰할 수 있는 부작용은 함수 내에서 외부 어떤 것와의 상호작용이다.

함수 외부에 존재하는 변수를 변경하는 것에서부터 함수 내에서 다른 방법을 호출하는 것까지 모든 것이 될 수 있다.


NOTE: 순수함수가 순수함수를 호출하는 경우 이는 부작용이 아니며 호출 함수는 여전히 순수함수이다.


Side effect는 다음을 포함하지만, 제한하지는 않는다.

  • Making a HTTP request
  • Mutating data
  • Printing to a screen or console
  • DOM Query/Manipulation
  • Math.random()
  • Getting the current time

Side effect 자체는 나쁘지 않고 종종 필요하다. 단, 순수함수를 선언하려면 함수를 포함해서는 안 된다.

모든 기능이 순수해야 하는 것은 아니다.

잠시 후에 순수함수에 대한 사용 사례에 대해 설명한다. 하지만 먼저 순수하고 불순한 함수의 예를 몇 가지 보여드리겠습니다...


자바스크립트의 순수함수 예제

시범을 위해, 세금을 포함한 제품 가격을 계산하는 순수함수의 예입 (영국 세금은 20%)

function priceAfterTax(productPrice) {
 return (productPrice * 0.20) + productPrice;
}

잠시 멈추고 이 함수가 왜 불순한지 추측 해봅시다. 함수가 외부 세금 변수에 따라 달라지기 때문이다!

순수 함수는 외부 변수에 의존할 수 없다. 요구 사항 중 하나를 충족하지 못하므로 이 함수는 불순하다.


자바스크립트에서 순수함수가 중요한 이유가 뭘까?

순수함수는 Functional Programming(함수형 프로그래밍)에 많이 사용된다.

또한 ReactJS 및 Redux와 같은 라이브러리는 순수 함수(ps)를 사용해야 한다.


그러나 단일 프로그래밍 패러다임에 의존하지 않는 일반 JavaScript에서도 순수함수를 사용할 수 있다. 순수하고 불순한 기능을 섞어도 좋다.


모든 기능이 순수해야 하는 것은 아니다. 예를 들어 DOM을 조작하는 버튼 누름용 이벤트 핸들러는 순수 기능에 적합하지 않다.

그러나 이벤트 핸들러는 응용 프로그램의 불순함수의 수를 줄일 수 있는 다른 순수 함수를 호출할 수 있다.


테스트와 리팩토링

가능한 경우 순수함수를 사용하는 또 다른 이유는 테스트 및 리팩토링이다.

순수함수를 사용할 때 얻을 수 있는 주요 이점 중 하나는 바로 테스트가 가능하다는 것이다.

동일한 인수를 전달하면 항상 동일한 결과가 생성된다.


또한 코드 유지 및 재조정을 훨씬 더 쉽게 할 수 있다. 순수함수 바꿀 수 있고 의도하지 않은 부작용이 전체 응용 프로그램을 망치고 디버깅 지옥으로 끝나는 것에 대해 걱정할 필요가 없다.

올바르게 사용할 경우 순수함수를 사용하면 더 나은 품질의 코드가 생성된다. 여러 가지 혜택과 함께 보다 깨끗한 작업 방식이다.

Clone this wiki locally