개발세발
프로그래밍 패러다임 본문
* 프로그래밍 패러다임
- 절차지향 프로그래밍
- 객체지향 프로그래밍
- 함수형 프로그래밍
- 함수형 반응형 프로그래밍
함수형 프로그래밍은 수학의 원리와 밀접하게 연관이 있어 진입장벽이 높다
따라서, 사람의 사고 방식과 가까운 절차지향, 객체지향이 더 보편적으로 사용되고 있음
- 하지만 암호화폐, ai 등이 등장하며 함수형 프로그래밍이 부상하고 있음
◼️ 함수형 프로그래밍의 특징
1️⃣ 순수함수
: 동일한 인자를 넣었을 때 항상 동일한 결과값을 반환하고, 언제 선언이 되었는지 외부에 전혀 영향을 받지 않도록 작성되어야 함
- 함수에서 외부의 상태값을 참조하거나 또는 외부의 상태를 변경하는 것은 순수함수가 아님
- 함수안에서 외부의 상태값을 변경한다면 절차지향적 프로그래밍임
2️⃣ 비상태 불변성을 유지해야 함
: 전달된 데이터를 변경하는 것이 아니라 새로운 버전의, 새로운 오브젝트를 만들어서 결과값으로 전달해야 함
- 외부의 상태나 함수에 인자로 전달된 데이터의 상태를 변경하지 않음으로써 side effect(부작용)을 만들지 않으므로 불변성을 유지함
: 여러가지 동시다발적인 멀티쓰레딩 환경에서도 안정적으로 동작할 수 있음
* js에서는 '불변성의 데이터 타입'이라는 것이 따로 없기 때문에 Object.freeze라는 함수를 이용해서 오브젝트를 불변성으로 만들어 줄 수 있음
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze
Object.freeze() - JavaScript | MDN
Object.freeze() 메서드는 객체를 동결합니다. 동결된 객체는 더 이상 변경될 수 없습니다. 즉, 동결된 객체는 새로운 속성을 추가하거나 존재하는 속성을 제거하는 것을 방지하며 존재하는 속성의
developer.mozilla.org
3️⃣ expressions을 사용해야 함
- if, switch, for과 같은 여러가지 문장(expressions)을 사용하는 것은 함수형 프로그래밍이 아님
- for loop로 도는 것이 아니라 map 사용
4️⃣ first-class와 higher-order functions의 특징을 갖고 있어야 함
- first-class (일급함수 ) : 함수를 변수에 할당하거나 함수에 인자로 전달하거나 리턴하는 등의 일을 함
- higher-order functions (고차함수) : 함수 자체를 인자로 전달하거나 함수에서 또 다른 함수를 리턴
객체 지향 프로그래밍을 위해 여러가지 디자인 패턴(추상화, 캡슐화, 다형성)을 공부해나가야 되듯이
함수형 프로그래밍을 위해
Monad ⭐️
Semigroup
Applicative
Monaid
Functor
Disjunction
등의 다양한 컨셉들을 잘 이해해야 함
* UI 어플리케이션은 특성상 많은 상태 변화가 일어나므로 순수 함수형 프로그래밍만으로는 무리가 있음
- 함수형 반응형 프로그래밍을 이용하거나 객체지향 프로그래밍에서 함수형 프로그래밍의 특징을 결합하여 안정적인 프로그래밍을 할 수 있음
요즘 핫한 chatGPT에도 물어봤다 ..
참고자료
https://www.youtube.com/watch?v=4ezXhCuT2mw&t=303s
'코딩공부 > 참고자료' 카테고리의 다른 글
vscode에서 discard changes 복원하는 방법 (2) | 2023.08.25 |
---|---|
프론트엔드 개발자 신입 면접 질문 리스트업 (0) | 2023.01.29 |
OAuth 2.0 (0) | 2023.01.01 |
UrlDecode (0) | 2023.01.01 |
매개변수와 인자 (0) | 2022.12.21 |