함수형 프로그래밍: 두 판 사이의 차이

내용 삭제됨 내용 추가됨
Addbot (토론 | 기여)
잔글 봇: 인터위키 링크 37 개가 위키데이터d:q193076 항목으로 옮겨짐
편집 요약 없음
1번째 줄:
{{출처 필요}}
'''함수형 프로그래밍'''은 계산을 [[함수 (수학)|수학적 함수]]의 평가로 취급하고 상태와 가변 데이타를 멀리하는 [[프로그래밍 패러다임]]의 하나이다. [[명령형 프로그래밍]]에서는 상태를 변화시키는 것을 강조하는 것과는 달리, 함수형 프로그래밍은 함수의 응용을 강조한다. 함수형 프로그래밍은 1930년대에 계산가능성, 결정문제, 함수정의, 함수응용과 재귀를 연구하기 위해 개발된 형식체계인 [[람다 대수]]에 근간을 두고 있다. 많은 함수형 [[프로그래밍 언어]]들은 람다 계산을 발전시킨 것으로 볼 수 있다.
'''함수형 프로그래밍'''은 [[프로그래밍 패러다임]]의 하나로, 계산을 [[함수 (수학)|수학적 함수]]의 조합으로 생각하는 방식을 말한다. 이것은 일반적인 [[프로그래밍 언어]]에서 함수가 특정 동작을 수행하는 역할을 담당하는 것과는 반대되는 개념으로, 함수를 수행해도 함수 외부의 값이 변경될 수 없다.
 
사실, 수학적 함수와 명령형 프로그래밍에서 사용되는 함수는 차이가 있는데, 명령형의 함수는 프로그램의 상태의 값을 바꿀 수 있는 부작용이 날 수 있다. 이 때문에 명령형 함수는 참조투명성이 없게 되어, 같은 코드이라도 실행되는 프로그램의 상태에 따라 시간마다 다른 결과값을 낼 수 있다. 반대로 함수형 코드에서는 함수의 출력값은 그 함수에 입력된 인수에만 의존하는데, 그래서 인수 x에 같은 값을 넣고 함수 f를 호출하면 항상 f(x)라는 결과가 나온다. 부작용을 제거하면 프로그램의 동작을 이해하고 예측하는데 훨씬 쉽게 된다. 이것이 함수형 프로그래밍으로 개발하려는 핵심 동기중 하나이다.
 
함수형 프로그래밍 언어는, 특히 최초의 Hope같은 순수 함수형 언어는 상업적 소프트웨어 개발에서보다는, 학계에서 많은 관심을 받았다. 하지만 [[커먼 리스프]], [[스킴 (프로그래밍 언어)|스킴]], ISLISP, Clojure, Racket, [[얼랑 (프로그래밍 언어)|얼랑]], [[Objective Caml|OCaml]], [[하스켈]], [[스칼라 (프로그래밍 언어)|스칼라]], [[F 샤프|F#]] 같은 주요 함수형 언어들은 광범위한 조직에서 산업적이고 상업적인 어플리케이션에서 사용되고 있다. 함수형 언어는 R (통계), [[매스매티카]] (상징과 수론 수학), J, K 와 Kx 시스템 기반 (재정 시스템)에서 나온 Q, XQuery/[[XSLT]] ([[XML]]), Opal 같은 특정 영역 프로그래밍 언어(Domain Specific Language)에서도 사용되고 있다. 많이 쓰이는 특정 영역 선언 언어인 [[SQL]]과 [[Lex|lex]]/[[Yacc]]는 특히 가변값을 회피하는데 있어 함수형 언어의 일정 요소들을 사용한다.
 
함수형 스타일의 프로그래밍은 함수형 언어로 별도로 설계되지 않은 언어에서도 가능하다. 예를 들어, 명령형인 [[펄]] 프로그래밍 언어는 함수형 프로그래밍 개념을 적용하는 법을 설명하는 책의 주제이기도 했다. [[C 샤프|C#]] 3.0은 함수형 스타일의 쓸 수 있는 구문을 추가했다.
 
== 역사 ==