일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- App Runner
- Algorithm
- 인사이드아웃
- typescript
- 자바스크립트
- 리액트
- 스나이퍼팩토리
- 프로세스
- 개발자부트캠프
- cs #네트워크
- IT개발캠프
- 네트워크
- 스레드
- 프로그래머스
- react
- 프로젝트캠프
- React.js
- 메모리
- #프로젝트캠프 #프로젝트캠프후기 #유데미 #스나이퍼팩토리 #웅진씽크빅 #인사이드아웃 #IT개발캠프 #개발자부트캠프 #리액트 #react #부트캠프 #리액트캠프
- BFS
- javascript
- 해시
- 웅진씽크빅
- 알고리즘
- react-query
- ip
- 타입스크립트
- CS
- 유데미
- html
- Today
- Total
Bin's Blog
오늘의 CS(프로그래밍 패러다임 - 선언형과 함수형 프로그래밍) 본문
프로그래밍 패러다임이란 프로그래머가 프로그래밍을 어떻게 접근하고 생각하는지에 대한 방법론이나 관점이다.
1.1 선언형 프로그래밍
어떻게 문제를 해결하는지보다 무엇을 해결하려는지에 집중하는 패러다임이다. 예를 들어) 레고 조립도면을 보는 것과 같다. 조립도면은 우리가 최종적으로 어떤 모양의 레고를 만들어야 하는지 알려준다. 그러나 어떻게 조합해야 하는지는 알려주지 않는다.
1.2 함수형 프로그래밍
입력과 출력 간의 관계를 설명하고, 프로그램은 이 선언에 따라 동작하게 된다. 마치 레고 조립도면에서 "이 블록이 이 블록 위에 오면, 이런 모양이 된다"는 규칙을 선언하는 것과 비슷하다.
const list = [1, 2, 3, 4, 5, 6, 7];
const ret = list.reduce((max, num) => num > max ? num : max, 0);
// 7
console.log(ret)
reduce()는 배열만 받아서 누적한 결괏값을 반환하는 순수 함수이다. 함수형 프로그래밍은 이와 같은 작은 순수 함수들을 블록처럼 쌓아 로직을 구현하고 "고차 함수"를 통해 재사용성을 높인 프로그래밍 패러다임이다.
자바스크립트는 단순하고 유연한 언어이며, 함수가 일급 객체이기 때문에 객체지향 프로그래밍보다는 함수형 프로그래밍 방식이 선호된다.
* 순수 함수: 같은 입력이 주어지면 항상 같은 결과를 반환하는 함수이다. 순수함수는 외부함수의 어떤 상태도 변경하지 않고, 외부 상태에 의존하지도 않는다.
* 고차 함수: 함수를 입력으로 받거나, 함수를 결과로 반환하는 함수를 말한다. 예를 들어, 친구에게 더하기나 빼기 같은 계산을 해달라고 부탁하고, 그 결과를 받는 것을 상상해보자. 여기서 더하기나 빼기를 수행하는 역할이 바로 고차함수이다.
고차함수의 특징은 변수나 메서드에 함수를 할당할 수 있고, 함수 안에 함수를 매개변수로 담을 수 있다. 함수가 함수를 반환할 수 있다.
*예시 코드
function double(x) {
return x * 2;
}
const numbers = [1, 2, 3, 4];
const doubledNumbers = numbers.map(double);
// [2, 4, 6, 8]
console.log(doubledNumbers);
double 함수는 숫자를 2배로 만드는 함수이다. map() 메서드는 numbers 배열의 각 요소에 double 함수를 적용하고 그 결과 새로운 배열 doubledNumbers를 만든다. 이렇게 고차함수는 함수를 다루는 데 큰 유용성을 가지며, 코드를 더 간결하고 가독성 좋게 만든다.
'CS' 카테고리의 다른 글
오늘의 CS(프로그래밍 패러다임 - 절차형 프로그래밍) (0) | 2023.05.18 |
---|---|
오늘의 CS(프로그래밍 패러다임 - 객체지향 프로그래밍) (0) | 2023.05.17 |
오늘의 CS(디자인 패턴 - MVC 패턴, MVP패턴, MVVM 패턴) (0) | 2023.05.15 |
오늘의 CS(디자인 패턴 - 노출모듈 패턴) (0) | 2023.05.12 |
오늘의 CS(디자인 패턴 - 이터레이터 패턴) (0) | 2023.05.11 |