일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 리트코드
- Graph
- VIM
- java
- 다이나믹 프로그래밍
- Data Structure
- CS
- Python
- react
- TypeScript
- DFS
- BFS
- 안드로이드
- network
- Database
- 백준
- frontend
- 그레이들
- Javascript
- 알고리즘
- Redux
- vscode
- 자바
- Algorithm
- 프로그래머스
- git
- db
- LeetCode
- 동적 계획법
- DP
Archives
- Today
- Total
늘 겸손하게
CS - Software Engineering - 함수형 프로그래밍 본문
Computer Science/Software Engineering
CS - Software Engineering - 함수형 프로그래밍
besforyou999 2022. 11. 4. 17:11[ 함수형 프로그래밍 ]
다른 이름 = 선언형 프로그래밍
함수형 프로그래밍은 순수 함수와 보조 함수의 조합을 통해 외부 상태를 변경하는 부수 효과를 최소화해서 불변성(immutability)을 지향하는 프로그래밍 패러다임이다.
함수형 프로그래밍 특징
1. 순수함수 (Pure Function)
- 동일한 입력에는 항상 동일한 값을 반환하는 함수
- 함수 실행이 side effect를 발생시키지 않는 함수
- side effect 예시
- 프로그램 상태 변경
- 함수 외부 변수 변경
- 함수의 입력, 출력과 관계없는 작업
2. 비상태, 불변성 (Stateless, Immutability)
- 함수형 프로그래밍에서 데이터는 불변성을 유지해야 한다.
- 데이터 변경이 필요한 경우, 원본 데이터의 복사본을 만들어 복사본을 사용한다.
3. 선언형 함수
명령형 프로그래밍은 무엇을 어떻게 할 것인가에 주목하고, 선언형 프로그래밍은 무엇을 할 것인가에 주목한다.
4. 1급 객체와 고차함수 (First-class, Higher-order functions)
함수형 프로그래밍에서는 함수가 1급 객체가 된다. 1급 객체의 특징은 다음과 같다.
- 변수나 데이터 구조안에 담을 수 있다.
- 파라미터로 전달 할 수 있다.
- 반환값(return value)으로 사용할 수 있다.
- 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
- 동적으로 프로퍼티 할당이 가능하다.
[ 함수형 프로그래밍의 장단점 ]
장점
- 높은 수준의 추상화 제공
- 함수 단위 코드 재사용이 수월
- 불변성을 지향하기 때문에 프로그램의 동작을 예측하기 쉬워진다.
단점
- 순수함수를 구현하기 위해서는 코드의 가독성이 좋지 않을 수 있다.
- 함수형 프로그래밍에서는 반복이 for문이 아닌 재귀를 통해 이루어지는데, 무한 루프에 빠질 가능성이 있다.
- 순수함수를 사용하는 것은 쉬울 수 있으나 조합하는 것은 쉽지 않다.
[ 출처 ]
https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Software%20Engineering/Fuctional%20Programming.md
https://jongminfire.dev/%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
GitHub - gyoogle/tech-interview-for-developer: 👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖
👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖. Contribute to gyoogle/tech-interview-for-developer development by creating an account on GitHub.
github.com
'Computer Science > Software Engineering' 카테고리의 다른 글
CS - Software Engineering - 3rd party (써드 파티) (0) | 2022.11.04 |
---|---|
CS - Software Engineering - DevOps (0) | 2022.11.04 |
CS - Software Engineering - Agile (애자일) (0) | 2022.11.02 |
CS - Software Engineering - TDD(Test Driven Development) (0) | 2022.11.02 |
CS - Software Engineering - 클린 코드 (0) | 2022.11.02 |