Page 19 - 006963
P. 19
● 함수는 구체적인 입력과 출력에 대한 타입 시그니처와 함께 선언됩니다.
● 타입이 제대로 정렬되어야 하는 컴파일 단계가 있습니다(나중에 다시 다룹니다).
● 다른 언어에서는 어려운 일이 아닌 부가 작용을 다루기 어렵습니다.
● null 개념이 없습니다.
Note 이 목록들이 모든 함수형 언어에 적용되는 것은 아닙니다.
11.1.2 이점
11
좋은 소식은 이러한 제한들 때문에 오히려 많은 이점이 발생한다는 것입니다. 예를 들어 어떤 값
이 작은 범위에만 존재하고 변경할 수 없다면, 항상 같은 인수에는 같은 결괏값을 반환하므로 해 함수형 프로그래밍
당 함수 호출을 신뢰할 수 있습니다. 이러한 것을 멱등성(idempotence)이라고 하는데, 두 가지 순수
함수를 만드는 방법 중 하나입니다. 다른 한 방법은 아예 부가 작용을 만들지 않는 것입니다.
책에서는 믿을 수 있는 값을 반환한다는 것을 목표로 노력해 왔지만, else를 제약하는 것에서 오
는 이점은 무엇일까요? else가 없는 if 코드를 본다면 반환하는 값을 변경할 수도 있고, 오류를
던질 수도 있으며, 다른 부가 작용이 발생할 수도 있다는 것을 알 수 있습니다. 즉, else가 없다면
불순 인자가 함수에 몰래 들어가는 매개체가 될 수 있습니다.
타입 시그니처(나중에 더 많이 다루지만, 5장에서 문자열 및 숫자 같은 입력 및 출력 타입을 어떻
게 이야기했는지 떠올려 보세요)는 어떤 타입 값이 어디서 전달되는지 설정하기 때문에 컴파일 단
계에서 함수의 순수성을 보호할 수 있습니다(그리고 실행 시간 오류뿐만 아니라 타입 오류를 포함
해서 오류를 발견하기 좋습니다). 하스켈처럼 더 엄격한 함수형 프로그래밍 언어에서는 불충분한
함수를 가질 수 있지만, 설정이 복잡할 수 있습니다. 이처럼 엄격한 함수형 프로그래밍 언어는 함
수형(functional)에서 재미(fun)는 제외하고 단지 형식(ctional)만 취하게 합니다.
이전 절에서 언급한 안 좋은 소식 중 마지막 항목은 앞에서 언급했듯이 null을 피하는 것은 10억
달러를 절약할 수 있는 방법이라는 것입니다. 이것은 언급된 모든 제약 중 가장 좋은 제약입니다.
따라서 null 개념이 없다는 것에서 제약을 느끼지 않아도 됩니다.
이제부터는 좀 나은 소식입니다. 순수한 기능을 사용한다는 함축적 의미는 편리한 것부터 매우 강
제적인 것까지 다양합니다. 상태가 없는 세계에서는 무슨 일이 언제 일어났는지에 대해 더 이상
의문의 여지가 필요 없는 것처럼, 한 기계의 두 프로세싱 코어(또는 그 이상)는 같은 기능을 실행
427
리팩토링 자바스크립트(본문)최종.indd 427 2018-09-19 오전 1:31:34