선언형 프로그래밍
선언형 프로그래밍은 ‘무엇’을 할 것인지에 집중하는 프로그래밍 패러다임이다.
이에 반해 명령형 프로그래밍은 ‘어떻게’ 할 것인지를 설명한다.
예를 들어, 데이터베이스에서 정보를 검색하는 경우, 선언형 프로그래밍은 검색하려는 정보의 조건만 명시하면 컴퓨터가 어떻게 그 정보를 찾을지 알아서 처리하게 된다.
ex) SQL, HTML …
선언형 프로그래밍의 장단점
장점
•
코드가 직관적이며 가독성이 높다.
•
개발자가 ‘어떻게’ 를 걱정할 필요가 없으므로 개발이 단순화된다.
단점
•
선언형 프로그래밍은 컴퓨터에게 과정을 자동으로 처리하도록 맡기므로 성능 문제가 발생할 수 있다.
•
하드웨어에 대한 최적화가 어려울 수 있다.
함수형 프로그래밍
함수형 프로그래밍은 선언형 패러다임의 일종으로, 작은 순수 함수들을 블록처럼 쌓아 로직을 구현하고 고차 함수를 통해 재사용성을 높인 프로그래밍 패러다임이다.
순수 함수와 불변성을 중심으로 프로그램을 구성한다.
•
순수 함수
◦
출력이 입력에만 의존하는 것을 의미한다. - 동일한 입력에 항상 동일한 출력
◦
함수의 실행은 프로그램의 실행에 영향을 미치지 않아야 한다.
(사이드 이펙트가 없다 - 오로지 출력만 수행한다.)
•
불변성
◦
데이터가 한번 생성되면 그 상태가 변하지 않는 것을 의미한다.
•
고차 함수
◦
함수를 매개변수로 받아 로직을 생성할 수 있는 함수를 말한다.
◦
고차 함수를 사용하기 위해서는 해당 언어가 일급 객체라는 특징을 가져야 하는데, 그 특징은 다음과 같다.
▪
변수나 메서드에 함수를 할당할 수 있다.
▪
함수 안에 함수를 매개변수로 담을 수 있다.
▪
함수가 함수를 반환할 수 있다.
ex) 자바스크립트의 배열 메서드, 리액트에서의 useState 등 상태 관리 …
함수형 프로그래밍의 장단점
장점
•
코드의 예측 가능성과 테스트 용이성이 높다.
•
불변성 때문에 병렬 처리에 적합하다.
단점
•
학습곡선이 높다. 일반적인 명령형 프로그래밍에 익숙한 개발자들에게는 이해하기 어려울 수 있다.
선언형 프로그래밍 vs 함수형 프로그래밍
선언형 프로그래밍은 결과에 집중하는 반면, 함수형 프로그래밍은 프로세스에 집중한다.