물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그램기법이다. 대표적인 절차지향 언어에 C언어가 있다. 이는 컴퓨터의 작업 처리 방식과 유사하기 때문에 객체 지향 언어를 사용하는 것에 비해 더 빨리 처리되어 시간적으로 유리하다.
하지만 소프트웨어 언어의 발달로 하드웨어가 소프트웨어의 발달을 따라오지 못하는 상황이 발생하면서 객체지향 언어가 등장하는 계기로 작용했다. 객체지향 프로그래밍은 개발하려는 것을 기능별로 묶어 모듈화 함으로써 하드웨어가 같은 기능을 중복으로 연산하지 않도록 하고, 모듈을 재활용하기 때문에 하드웨어의 처리량을 획기적으로 줄여주었다.
절차지향 프로그래밍은 순서와 흐름을 먼저 세우고 필요한 자료구조와 함수들을 설계하는 방식이고,
객체지향 프로그래밍은 반대로 자료구조와 이를 중심으로 한 모듈들을 먼저 설계한 다음에 이들의 실행 순서와 흐름을 짜는 방식이다.
위에서 절차지향과 객체지향 프로그래밍 차이를 비교해보았다면, 객체지향의 특성을 소개해보려 한다.
map
메서드를 활용해서 UI를 구현해야 한다. 이 때 개발자가 메서드에 대한 구조를 일일이 확인할 필요가 있을까? 이또한, 학습의 목적이 아니라면 필요치 않을 것이다.명령형 프로그래밍 : 어떤 프로그래밍의 동작이 어떻게 이뤄지는지 알고 결과값을 도출해내는 방식
(절차지향, 객체지향)
선언형 프로그래밍 : 어떤 프로그래밍의 동작 보다는 필요한 결과값을 정해놓은 방식
(함수형 프로그래밍)
명령형 일때에는 프로그래밍이 동작하는 동안 해당 코드에 접근하여 그 동작을 이끌어내어 활용한다는 사고이지만, 선언형일 때에는 어떤 결과값이 필요하여 해당 동작을 도구로써만 활용하는 사고이다.
위에서 봤던 것과 같이 이는 프로그래밍을 설계하는 사고, 관점의 차이라고 볼 수 있다.
여기서도 함수형 프로그래밍의 속성을 설명하려 한다.
순수 함수는 함수형 프로그래밍에 필요한 개념으로 기존 함수와는 다른 몇가지 조건이 필요하다.
먼저, 함수가 실행되는 동안 프로그램에 영향을 미쳐서는 안된다. 예를 들어 html 문서로 접근하여 태그를 삽입하는 것과 같은 동작이다. 태그 자체를 리턴할 수는 있지만 실행 중에 side-effect 가 있어서는 안되며 오직, 출력만 수행한다는 의미이다.
그리고 같은 인풋 값에 있어서는 동일한 아웃풋 값이 나와야 순수함수이다.
함수형 프로그래밍은 소프트웨어를 이 순수함수로 조합하여 만드는 방식이다.
참고
절차지향과 객체지향의 고찰
객체지향 프로그래밍의 속성
함수형 프로그래밍의 요약
함수형 프로그래밍의 특징