- 프로그래머가 프로그래밍의 특정 관점을 갖게 해주는 개발 방법론
- 크게 선언형, 명령형 두 가지 패러다임으로 분류할 수 있고, 각 패러다임에서 파생되는 프로그래밍 방식들이 존재한다
선언형
- Declarative Programming, 무엇을 풀어내는가에 집중하는 패러다임
- 프로그램은 함수로 이루어져 있다는 명제가 있다
함수형
- 순수 함수들을 조합하여 로직을 구현하는 방식
- 여기서 순수 함수란, 출력이 입력에만 의존하는, 다른 외부 영향을 받지 않는 함수를 의미한다
const ret = [1,2,3,5,10].reduce((max, num) => num > max ? num : max, 0)
// 위에선 reduce, 배열 입력만 받아 최대값을 추출하고 있다
console.log(ret) // 10
- 불변성 (Immutablility) 이란 특징이 있는데, 함수형 프로그래밍에서 객체는 불변의 상태이고, 불변이기에 어플리케이션의 영향을 주지 않는다
- 불변성이 있지만 객체 수정이 필요한 경우, 복사본을 만드는 식으로 유지한다
명령형
- Imperative Programming, 어떻게 풀어내는가에 집중하는 패러다임
객체지향
- 데이터를 객체로 취급하여 프로그래밍을 구성하고 상호작용하도록 개발하는 방식
- 객체지향은 크게 4개 특징을 가지고 있다
- 추상화 - 시스템으로부터 객체의 기능을 간추리는 것
- 캡슐화 - 객체 속성 중 일부를 외부에 감추는 것
- 상속성 - 하위 객체가 상위 객체를 이어 받아 기능을 확장하는 것
- 다형성 - 하위 객체가 여러 상위 객체를 이어 받던지, 객체의 기능이 여러 방식으로 구현되는 것
- ex) Overloading, Overriding
- 위 특징들을 살려 생산성을 높일 수 있지만, 객체가 상태를 가지기 때문에 변화가 생길 수 있고, 이 변화는 예측할 수 없는 상태가 되어 버그를 유발할 수 있다
- 이는 함수형 프로그래밍의 탄생 배경이기도 하다
절차지향
- 로직이 수행되어야 할 연속적인 과정으로만 이루어진 방식
- 대표적으로 C, fortran 언어가 있으며, 실행은 빠르지만 모듈화가 어려운 단점이 있다