프로그래밍 패러다임이란 프로그래머가 프로그램을 작성하는 일반적이고 규칙적인 방식을 의미한다. 이때, 프로그래밍 패러다임은 언어에 대해 독립적이며, 프로그래머가 프로그램 작성을 위해 적절히 알맞은 패러다임을 선택하여 프로그램 작성에 이용하는 것이다. 프로그래밍 패러다임은 서로 배타적이지 않고 양립할 수 있으며 새로운 패러다임의 등장으로 기존의 패러다임이 더 높은 완성도로 발전하기도 한다.
프로그래밍 언어 패러다임은 여러 프로그래밍 패러다임 중 특정 프로그래밍 언어가 지원하는 프로그래밍 패러다임을 말한다. 하나의 프로그래밍 언어는 여러 종류의 프로그래밍 패러다임을 지원할 수 있다. 시대의 요구에 따라 새로운 프로그래밍 패러다임이 등장하고 많이 사용되면 기존의 언어가 새로운 패러다임을 흡수하고 지원하는 방향으로 변화하기도 한다.
순수함수란 side-effect를 발생시키지 않는 함수를 말한다. side-effect는 부수효과로 함수가 받은 입력값을 그 자체로 계산하여 변화된 값을 return 하는 의미 외에 메모리의 상태가 변화하는 행동을 하는 경우를 말한다. 즉, 변수의 값이 수정되는 경우를 주로 말한다. 순수함수는 이러한 side-effect를 발생시키지 않음으로서 thread-safe하여 multithread환경에서 동기화에 신경을 쓰지 않아도 되는 매우 큰 장점이 있다.
이러한 순수함수는 referential transparancy를 주는데 이는 참조받은 객체의 값을 변경시키지 않으면서 항상 같은 값을 return 하는 성질을 말한다.
즉, 순수함수란 같은 입력에 대해 항상 같은 값을 출력하며, 외부의 변수에 변화를 일으키지 않고 매개변수외에 값은 사용할 수 없는 함수를 말한다.(수학적의미에서의 함수와 동일하다.)==referential transparancy == no side-effect + 항상 같은 값 return
명령형 프로그래밍 패러다임이란 어떠한 동작을 할지를 결정하여서 순서대로 실행하는 방식으로 프로그램을 작성하는 방식이다. 각 명령문이 실행될때마다 컴퓨터의 상태(주로 메모리 상태)가 변화되는 방식으로 실행된다. 메서드들은 메모리의 주소 값을 받아 메모리의 상태를 변화 시키는 side-effect를 발생시킬 수 있다.
반대로 선언형 프로그래밍중 함수형 프로그래밍을 한마디로 정의하면 "부수 효과가 없는 순수 함수를 1급 객체로 간주하여 파라미터로 넘기거나 반환값으로 사용할 수 있으며 참조 투명성을 지킬 수 있다"이다.
1급 객체
즉, 함수형 프로그래밍이란 거의 순수함수만을 사용하여 프로그래밍을 함으로서 thread-safe할 수 있다. 따라서 대입문이 없다.