개발세발

프로그래밍 패러다임 본문

코딩공부/참고자료

프로그래밍 패러다임

뉼👩🏻‍💻 2023. 2. 2. 19:26
728x90
반응형
SMALL

 

* 프로그래밍 패러다임

- 절차지향 프로그래밍

- 객체지향 프로그래밍

- 함수형 프로그래밍

- 함수형 반응형 프로그래밍

 

함수형 프로그래밍은 수학의 원리와 밀접하게 연관이 있어 진입장벽이 높다

따라서, 사람의 사고 방식과 가까운 절차지향, 객체지향이 더 보편적으로 사용되고 있음 

 

- 하지만 암호화폐, 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 

 

728x90
반응형

'코딩공부 > 참고자료' 카테고리의 다른 글

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