프로그램은 순차, 분기, 반복, 참조로 구성된다.
패러다임을 위 4가지 요소로 어떻게 이용할 것인가를 다룬다.
객체지향 프로그래밍이 절차지향 프로그래밍의 단점을 극복하기 위해 등장했다고 한다.
함수형 프로그래밍은 객체지향 프로그래밍의 단점을 극복하기 위해서 등장했다고 한다.
하지만 무엇이 좋고 나쁘고가 아닌 적재적소에 사용하면 된다.
프로그래밍은 크게 선언형 프로그래밍과 명령형 프로그래밍으로 나뉘고
선언형 프로그래밍의 대표적인 예시가 함수형 프로그래밍이며
명령형 프로그래밍의 대표적인 예시는 절차형 프로그래밍과 객체지향 프로그래밍이다.
절차형, 객체지향, 함수형 프로그래밍은 설계에 대한 패러다임이다.
허나 선언형, 명령형 프로그래밍은 설계에 대한 패러다임이라기 보다는 사고에 대한 패러다임이다.
명령형 프로그래밍은 컨트롤 플로우 방식으로써 명령어를 통해 데이터를 제어하는 것을 목표로 한다.
명령형 프로그래밍은 문제를 어떻게 해결해야 하는지 컴퓨터에게 명령을 내리는 방법이다.
즉, 무엇가를 작업하기 위해 어떻게 진행할 것이지를 나열한다.
// 컨트롤 플로우 방식에 사용되는 명령어
if/else-if/else
switch-case
for/while
등등
(이미지 출철 : 위키백과)
일이 진행되는 순서대로 프로그래밍하는 방법
코드의 가독성이 좋다.
컴퓨터의 처리구조와 비슷해 실행 속도가 빠르다.
각각의 코드가 순서에 민감하게 연결 되어있어, 유지보수 및 분석이 어렵다.
객체를 이용하여 데이터와 메서드를 묶고 이런 객체들간에 통신을 함으로써 프로그램이 동작한다.
명령형 프로그래밍은 데이터 플로우 방식으로써 상태가 존재하지 않고 재귀나 파이프를 통해 데이터가 흘러가는 방식이다.
선언형 프로그래밍은 무엇을 해결해야 할지 집중하고 해결 방법은 컴퓨터에게 위임하는 방법이다.
즉, 무엇가를 작업하기 위한 방법을 정의한다.
// 데이터 플로우 방식 키워
stateless
Recursion
pipe
데이터를 함수들의 파이프라인 형태로 변경해가며 새로운 데이터를 만들어 나가면서 프로그램이 동작한다.
<문제>
N개의 숫자가 공백 없이 쓰여있다.
이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.
절차 지향 프로그래밍
// 절차 지향 프로그래밍
const stringNumber = '12345';
let sum = 0;
for (let i = 0; i < stringNumber.length; i++) {
sum += Number(stringNumber[i]);
}
console.log(sum); // 15
객체 지향 프로그래밍
// 객체지향 프로그래밍
function StringNumber(string) {
this.string = string;
}
StringNumber.prototype.calculate = function () {
this.sum = 0;
for (let i = 0; i < this.string.length; i++) {
this.sum += Number(this.string[i]);
}
};
const stringNumber = new StringNumber('12345');
stringNumber.calculate();
console.log(stringNumber.sum); // 15
함수형 프로그래밍
// 함수형 프로그래밍
const stringNumber = '12345';
console.log(
stringNumber
.split('')
.map(v => Number(v))
.reduce((sum, num) => (sum += num))
); // 15
자바스크립트는 멀티 패러다임이 가능하다.
굳이 객체지향이 함수형으로 나눌 필요없이 필요에 따라 적절하게 선택하여 사용하면 된다.