Peace to steemit kr-dev.
"Dive deep as much as you can"
함수형 프로그래밍에 대해서 즐거운(?) 논문이 있어, 꺼내와 봤습니다.
논문 일부분을 번역합니다. (중간 중간에 건너 띤 부분도 약간 있습니다)
I'd like to translate an articles related with Functional Programming.
원문 링크
http://www.cse.chalmers.se/~rjmh/Papers/whyfp.html
Abstract
소프트웨어가 복잡해 질 수록 구조화를 잘하는 것이 점점 더 중요해진다.
잘 구조화된 소프트웨어는 작성하기 쉽고 디버깅하기 쉬우며,
재사용되는 모듈의 컬렉션을 제공하는데 이는 미래의 프로그래밍 비용을 줄일 수 있다.
이 논문에서 우리는 함수형 언어의 특징 중
이 두 가지가 모듈성에 크게 기여하는 것을 보여주려고 한다.
예제로서 우리는 리스트와 트리를 다룰 것이고,
몇 가지의 수치해석적 알고리즘을 프로그램할 것이고,
알파-베타 휴리스틱 (게임 프로그래밍에서 사용되는 인공지능 알고리즘)을 구현해 볼 것이다.
모듈성이 성공적인 프로그래밍의 키 포인트이므로,
함수형 프로그래밍은 소프트웨어 개발에 큰 장점을 준다는 결론을 얻는다.
논문의 목적
함수형 프로그래밍의 기본 동작은 함수를 매개변수로 취하는 것이다.
주 프로그램(Main program)은 외부 입력을 매개변수로 하고
결과를 출력하는 프로그램이다.
주 프로그램은 다른 함수에 의해 정의되며
그 함수는 많은 함수들에 의해 정의되는데,
가장 마지막 단의 함수는 언어 기본형으로 되어있다.
모든 함수들은 수학적 함수와 많이 닮아있으며,
여기서는 방정식으로 정의된 함수를 사용할 것이다.
함수형 프로그램 특징
함수형 프로그래밍이라고 하면 대부분 이러한 것 들을 이야기 하는데,
이는 마치 중세 수도사의 길을 걸어야 하는 것처럼 들리며 흥미롭지 않다.
함수형 프로그래머는 어마어마한 정도로 생산성이 있다고 이야기한다.
왜냐하면 어마어마하게 짧기 때문이다.
왜 그래야 하는가?
일반적인 프로그래밍은 90%가 대입문인데,
근데 함수형에는 대입문이 없다.
역자주 : 우하하하...
어떤 언어에서 어떤 기능(feature)을 뺀다고 강력해질 수 있는 것인가?
함수형 프로그래머 조차 이러한 장점에 만족하지 않을 것이다.
왜냐하면 함수형 언어의 힘을 활용하는데 어떤 도움도 되지 않기 때문이다.
어떠한 사람도 특별히 대입문이 부족한,
특별히 참조 투명성이 부족한 프로그램을 작성할 수 없다.
여기에는 프로그램의 질을 측정할 수 있는 잣대가 없으며 추구할 가치도 없다.
지금까지 이야기한 함수형 프로그래밍의 특징은 부적절하다.
무엇인가 분명한 것을 찾아야 하며,
그쪽 방향으로 함수형 프로그래머의 방향을 제시할 만한 것을 찾아야 한다.
구조적 프로그래밍과의 유사성을 보여주는 것은 도움이 된다.
과거에 구조적 프로그래밍이라고 함은 아래와 같이 생각되어져왔다.
구조적 프로그래밍의 본질은 모듈화에 있다.
모듈라 디자인은 생산성에 큰 도움을 준다.
실제로 "goto문이 없음"은 위와 큰 상관이 없다. 이것은 단지
프로그램을 작게 만드는데 도움을 줄 뿐이다.
하지만 모듈라 디자인은 "큰 프로그램"을 만드는데 도움을 준다.
이제 모듈라 디자인이라는 것이 성공적인 프로그래밍의 열쇠라는
사실을 받아들일 수 있다.
모듈라 프로그래밍에서 간과하고 있는 사실이 하나 있는데,
문제를 작은 문제로 나누고 작은 문제를 해결하고 다시 하나로 합쳐야 한다.
문제를 나누는 방법은 작은 문제들을 다시 합치는(Glue) 방법에 의존한다.
프로그램을 잘 모듈화 시키려면, 프로그래밍 언어에서 새로운 종류의
Glue 를 제공해야할 필요가 있다.
변수의 스콥 정의, 분할컴파일 규칙 등은 사무적인 일만 도울 수 있으며,
모듈화에 크게 기여할 수 없다.
함수형 언어에서 새로운 두가지 중요한 Glue 에 대해서 살펴볼 것이다.
이것이 함수형 언어의 힘이며, 모듈라 디자인을 개선시킬 수 있다.
이후 내용은 논문을 직접 한번 보고 예제를 따라 해 보는 것이 좋습니다.
함수의 접합은 간단한 예를 들어
구조적 프로그래밍의 함수와 비교해서 어떻게 다른지
다음번에 올릴 예정입니다.