프로그래밍 패러다임
프로그래밍 패러다임
-
간단하게 프로그래밍 스타일을 의미하며 전체적인 프로그래밍 방식을 말한다.
-
프로그램은 순차, 분기, 반복, 참조로 구성되어지며 프로그램 개발을 위하여 전략을 수립해야 한다.
-
위에서 말한 전략은 어떤 언어를 사용할지, 프로그래밍에서 어떤 것을 지양하고, 지양할지 등등 다양한 방법을 수립하게 된다. 여기서 말한 전략에 해당하는 내용들이 프로그래밍 패러다임이다.
-
대표적인 프로그래밍 패러다임에는 절차적, 객체지향, 함수형 프로그래밍이 존재한다.
명령형 프로그래밍
간단하게 프로그래밍 스타일을 의미하며 전체적인 프로그래밍 방식을 말한다.
프로그램은 순차, 분기, 반복, 참조로 구성되어지며 프로그램 개발을 위하여 전략을 수립해야 한다.
위에서 말한 전략은 어떤 언어를 사용할지, 프로그래밍에서 어떤 것을 지양하고, 지양할지 등등 다양한 방법을 수립하게 된다. 여기서 말한 전략에 해당하는 내용들이 프로그래밍 패러다임이다.
대표적인 프로그래밍 패러다임에는 절차적, 객체지향, 함수형 프로그래밍이 존재한다.
문제를 어떻게 해결해야 하는지 컴퓨터에게 명령을 내리는 방법의 프로그래밍이다.
대표적으로 절차적 프로그래밍과, 객체지향 프로그래밍이 있다.
let a = [1, 2, 3, 4, 5];
for(let i = 0; i < 5; i += 1) {
if(a[i] % 2 === ) {
console.log(a[i]);
}
}
1. 절차(순차)적 프로그래밍
-
단어 그대로 절차(순차)적인 명령 수행뿐만 아니라, 프로시저 호출의 개념을 바탕으로 하고 있는
프로그램 패러다임입니다. -
C언어가 대표적인 절차적 프로그래밍 언어라고 불리고 있습니다.
const stringNumber = '12345';
let sum = 0;
for (let i = 0; i < stringNumber.length; i += 1) {
sum += stringNumber[i] - '0';
}
2. 객체지향 프로그래밍
-
최소 단위가 객체이며, 객체를 만들고, 이 객체를 사용하여 데이터와 메소드를 묶고 소통하는 프로그래밍 방식이다.
-
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)
);
멀티 패러다임
- JavaScript는 결국 멀티 패러다임이 가능하다.
- 각 패러다임의 장점을 활용하여 같이 쓰도록 하자.
const strNumber = '12345';
// strNumber 객체에 split, map, reduce 함수들이 객체에 포한되어진 경우
console.log(
strNumber
.split('')
.map(x => parseInt(x))
.reduce((x, y) => x + y);
);
참고자료
- https://egas.tistory.com/2
- https://blog.ull.im/engineering/2019/04/07/functional-programming-with-javascript-in-3-steps.html
- https://godsenal.com/posts/%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%9D%B4%EB%9E%80/
- https://kimphal.tistory.com/14
- https://subscription.packtpub.com/book/web_development/9781789800104/5/ch05lvl1sec38/side-effects
Author And Source
이 문제에 관하여(프로그래밍 패러다임), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@codenmh0822/프로그래밍-패러다임
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
const strNumber = '12345';
// strNumber 객체에 split, map, reduce 함수들이 객체에 포한되어진 경우
console.log(
strNumber
.split('')
.map(x => parseInt(x))
.reduce((x, y) => x + y);
);
Author And Source
이 문제에 관하여(프로그래밍 패러다임), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@codenmh0822/프로그래밍-패러다임저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)