→ 싸이클 반복
순차적 프로그래밍과 goto
절차적 프로그래밍 (c언어)
구조체 등장 (c언어)
객체 지향 프로그래밍_v1 (c++)
객체 지향 프로그래밍_v2 (Java)
JavaScript는 함수형 프로그래밍에 필요한 가장 중요한 기능을 가지고 있기 때문.
- first class 함수: 함수를 값으로 사용하는 기능으로 함수를 인수로 전달하고, 함수를 반환하고, 함수를 변수 및 객체 속성에 할당
- 람다 구문: 간결한 람다lambda는 고차원 함수로 작업하기가 더 쉽다.
- 클로저
js에는 없는 함수형 언어의 기능들
- 순수 : 부수효과가 발생할 수 있는 표현식은 허용되지 않아야한다. -> 코딩 컨벤션으로 해결해야함
- 불변성: 기존 데이터 구조 (예 : 배열 또는 객체)를 변경하는 대신 표현식은 새로운 데이터 구조를 생성해야한다. -> 외부 라이브러리나 es6문법 사용해야 함(const, object.freeze)
- 재귀 : FP 언어에서 재귀는 반복작업을 수행 할 수있는 유일한 방법이어야 한다.(for, while X) -> es6의 꼬리호출최적화 사용(브라우저가 많이 지원 안함.)
OOP는 코드를 객체를 이용해 분리하고, FP는 함수를 이용해 분리한다.
자바는 객체지향언어여서 OOP를 주로 하고, js는 멀티 패러다임이어서 OOP도, FP도 할 수 있다.
하지만 설계 구조를 OOP로 하고 로직 구현은 FP로 하는게 가장 이상적이다.
리액트의 클래스 컴포넌트는 객체지향과 가깝고, 함수 컴포넌트와 훅은 FP에 가깝다.
일반적인 디자인 패턴과 리액트의 디자인 패턴은 의미하는게 다르다.
디자인 패턴은 OOP을 할 때 재사용성을 위해 클래스와 인스턴스를 어떻게 다루는지에 대한 방법들을 말한다.
리액트의 디자인 패턴은 컴포넌트를 재사용하기 위한 설계 구조를 말하는 것.