간단하게 프로그래밍 스타일을 의미하며 전체적인 프로그래밍 방식을 말한다.
프로그램은 순차, 분기, 반복, 참조로 구성되어지며 프로그램 개발을 위하여 전략을 수립해야 한다.
위에서 말한 전략은 어떤 언어를 사용할지, 프로그래밍에서 어떤 것을 지양하고, 지양할지 등등 다양한 방법을 수립하게 된다. 여기서 말한 전략에 해당하는 내용들이 프로그래밍 패러다임이다.
대표적인 프로그래밍 패러다임에는 절차적, 객체지향, 함수형 프로그래밍이 존재한다.
문제를 어떻게 해결해야 하는지 컴퓨터에게 명령을 내리는 방법의 프로그래밍이다.
대표적으로 절차적 프로그래밍과, 객체지향 프로그래밍이 있다.
let a = [1, 2, 3, 4, 5];
for(let i = 0; i < 5; i += 1) {
if(a[i] % 2 === ) {
console.log(a[i]);
}
}
단어 그대로 절차(순차)적인 명령 수행뿐만 아니라, 프로시저 호출의 개념을 바탕으로 하고 있는
프로그램 패러다임입니다.
C언어가 대표적인 절차적 프로그래밍 언어라고 불리고 있습니다.
const stringNumber = '12345';
let sum = 0;
for (let i = 0; i < stringNumber.length; i += 1) {
sum += stringNumber[i] - '0';
}
최소 단위가 객체이며, 객체를 만들고, 이 객체를 사용하여 데이터와 메소드를 묶고 소통하는 프로그래밍 방식이다.
Java(자바)가 대표적인 객체지향 프로그래밍 언어라고 불리고 있습니다.
직관적이며, 유지보수가 쉽습니다.
function Stringnumber(string) {
this.string = string;
}
Stringnumber.prototype.calculate = () => {
this.sum = 0;
for (let i = 0; i < stringNumber.length; i++) {
this.sum += stringNumber[i] - '0';
}
};
function Printer(result) {
console.log(this.result);
}
Printer.prototype.log = function() {
console.log(this.result);
}
const stringNumber = new Stringnumber('12345');
stringNumber.calculate();
const printer = new Printer(stringNumber.sum);
printer.log();
무엇을 어떻게 해결해야 하는지 집중하고 해결 방법은 컴퓨터에게 위임하는 방법
대표적으로 함수형 프로그래밍이 있다.
[1, 2, 3, 4, 5]
.filter((item) => item % 2 === 0)
.forEach((item) => console.log(item));
최소 단위가 함수이며, 함수를 통하여 새로운 데이터들을 만들어가며 파이프 형태로 프로그래밍하는 방식이며 선언형 프로그래밍 방식과 비슷하다.
모든 데이터의 처리를 수학적 함수(function)의 계산으로 취급하여 결과 값을 받아보고자 하는 패러다임입니다.
함수 단위로 나눠지므로 재사용성이 높다.
Immutability
을 지향하기에 동작을 예측하기 쉽고 Side Effects
를 방지한다.
Immutability(불변성) ?
immutable 객체(변할 수 없는 객체)는 생성된 이후에는 바꿀 수 없는 객체이다.
불변성은 함수형 프로그래밍의 핵심 개념이다. 불변성이 없다면 프로그램의 데이터 흐름이 손실된다.
Side Effects(부작용)
함수형 프로그래밍에서 부작용은 함수 반환 값을 제외하고 함수 호출 외부에서 볼 수 있는 상태 변경을 뜻한다.
함수형 프로그래밍 규칙에 따르면 함수는 함수 외부의 상태를 수정할 수 없게 다룬다.
Side Effects
를 방지하므로 동시성 문제도 해결된다.const stringNumber = '12345';
console.log(
stringNumber
.split('')
.map((x) => parseInt(x))
.reduce((acc, cur) => acc + cur)
);
const strNumber = '12345';
// strNumber 객체에 split, map, reduce 함수들이 객체에 포한되어진 경우
console.log(
strNumber
.split('')
.map(x => parseInt(x))
.reduce((x, y) => x + y);
);