함수형 프로그래밍
🧐 함수형 프로그래밍이란?
- 함수를 함수로 넘기거나 함수가 함수를 결과로 내놓는 것이 가능하다.
- 다른 함수를 조작하고, 함수를 인자로 받거나 반환하는 것이 가능한 고차함수 개념을 사용한다.
고차함수란?
아래와 같이 함수를 인자로 받거나 함수를 반환하는 함수
const createScream = logger => message => logger(message.toUpperCase() + "!!!")
- 자바스크립트에서도 함수가 1급 시민, 즉 정수나 문자열 같은 다른 일반적인 값과 마찬가지로 취급 할 수 있기 때문에 함수형 프로그래밍을 지원한다.
- 함수를 변수, 객체, 배열에 넣을 수 있으며, 다른 값과 맟나가지로 함수를 다른 함수에 인자로 넘길 수 있고, 반환할 수 도 있다.
///함수를 변수에 넣을 수 있다
var log = message => console.log(message)
///함수를 객체에 넣을 수 있다
const obj = {
message : "함수를 객체에 넣을 수 있다."
log(message) {
console.log(message)
}
}
//함수를 배열에 넣을 수 있다.
const messages = {
message => console.log(message)
message => console.log(message)
}
👉 명령형 프로그래밍과 선언적 프로그래밍
- 명령형 프로그래밍이란 필요한 것을 달성하는 과정을 하나하나 기술하는 프로그래밍
- 선언적 프로그래밍이란 필요한 것이 어떤 것인지 기술하는 데 방점을 두고 애플리케이션의 구조를 세워나가는 프로그래밍 스타일
예시 (문자열을 URL에서 사용할 수 있게 모든 공백을 하이픈으로 바꿔보자)
1) 명령형 프로그래밍 방식
var string = "This is Minseung Park"
var urlFrinedly = "";
for(var i=0; i<string.length; i++){
if(string[i] === " "){
urlFrinedly += "-";
}else{
urlFrinedly += string[i];
}
}
2) 선언적 프로그래밍 방식
const string = "This is Minseung Park"
const urlFrinedly = string.replace(/ /g, "-") //string.replace와 정규식을 사용해서 모든 공백을 하이픈으로 변경
- 위에서 선언적 프로그래밍 방식은 구체적 절차 대신 replace라는 함수를 사용해 추상적인 개념을 표현했다.
- 선언적 프로그래밍의 코드 구문은 어떤 일이 발생해야 하는지 기술하고, 실제로 그 작업을 처리하는 방법은 추상화로 아랫단에 감춰짐.
예시(객체 모델(DOM)을 만들어 보자)
1) 명령형 프로그래밍 방식
var target = document.getElementById('target')
var wrapper = document.createElement('div')
var headline = document.createElement('hi')
wrapper.id = "welcome"
headline.innerText = "Hello World"
wrapper.appendChild(headline)
target.appendChild(wrapper)
2) 선언전 프로그래밍 방식 (React)
const {render} = ReactDOM
const Welcome = () => (
<div id="welcome">
<h1>Hello World</h1>
<div>
)
render(
<Welcome />,
document.getElementById('target')
)
React(리액트)도 선언적이다.
- 선언적 접근 방식이 더 읽기 쉽고, 그래서 더 추론하기 쉽다.
👍 함수형 프로그래밍은 선언적 프로그래밍의 패러다임의 한 가지이다 (선언적 ⊃ 함수형)
🤜 함수형 프로그래밍의 개념
(위 개념들을 클릭하시면 클릭하시면 더 자세히 파헤칠 수 있습니다.)
반응형
'Front-end > React' 카테고리의 다른 글
[React] 함수형 프로그래밍 핵심 개념 - 데이터 변환 (0) | 2020.07.05 |
---|---|
[React] 함수형 프로그래밍 핵심 개념 - 불변성 (0) | 2020.07.05 |
[React] 차근차근 Todo List 만들기 with Typescript- (3) ListItem Component (0) | 2020.07.02 |
[React] 차근차근 Todo List 만들기 with Typescript- (2) 구조 설계 (0) | 2020.07.02 |
[React] 차근차근 Todo List 만들기 with Typescript- (1) 프로젝트 생성 (2) | 2020.06.28 |