Fact
- 6일차!
Feelings
- 뭔가 안한 느낌… 엄청 찝찝하다…
Findings
함수형 프로그래밍
-
함수가 1급 객체이다.
- 함수를 변수처럼 사용이 가능하다.
- 함수를 조합해서 새로운 함수를 만들어도 된다.
- 함수 체이닝을 해서 복잡한 함수를 만들 수 있다.
- 모든게 함수 위주로 돌아 간다.
- 불변성과 순수 함수가 보장이 되어야 한다.
불변성 Immutable
- 불변 데이터는 일단 생성되면 변경할 수 없다.
- 훨씬 더 쉬운 애플리케이션 개발로 이어진다.
- 방어적 복사를 하지 않고, 간단한 논리로 고급 메모화 및 변경 탐지 기술을 가능하게 한다.
순수 함수
- 같은 입력값을 함수에 전달 할때 무조건 같은 결과값이 나와야한다.
-
side-effect가 없어야한다.
- side-effect 종류
- 입력값 변화
- console.log
- HTTP 호출 (AJAX/fetch)
- filesystem (fs) 수정
- DOM 쿼리
고차 함수
- 고차 함수(Higher order function)는 함수를 인자로 전달받거나 함수를 결과로 반환하는 함수를 말한다. 고차 함수는 인자로 받은 함수를 필요한 시점에 호출하거나 클로저를 생성하여 반환한다. 자바스크립트의 함수는 일급 객체이므로 값처럼 인자로 전달할 수 있으며 반환할 수도 있다.
const array1 = [1,2,3,4,5];
const array2 = [1,2,3,4,5];
const array3 = [1,2,3,4,4];
// using every
console.log(array1.every((value, index)=> value === array2[index]));// true
console.log(array1.every((value, index)=> value === array3[index]));// false
// using some
console.log(array1.some((value, index)=> value === array2[index]));// true
console.log(array1.some((value, index)=> value === array3[index]));// true
// using forEach
array1.forEach(x=> console.log(x)); // 1 2 3 4 5
객체지향 vs 함수형
함수형 | 객체지향 | |
---|---|---|
중점 | Functional programming emphasizes an evaluation of functions | Object-oriented programming based on a concept of objects |
데이터 | 불변 데이터 | 변화 가능 데이터 |
모델 | 선언형 모델 | 명령형 모델 |
반복 | recursive | loop |
기본 요소 | 변수/함수 | 객체/메소드 |
함수형은 operator이 많을때 쓰고 객체지향은 operator 보다 속성이 더 많을때 쓴다…?
함수형 프로그래밍은 효율성, lazy evaluation, nested function, 버그 없는 코드, 병렬 프로그래밍과 같은 장점을 제공한다. 그리고 고차함수, 불변성, 순수함수 등의 개념들을 가지고 있고 그 외 에도 Strict and Non-strict Evaluation, Type systems, Referential Transparency 개념들을 내포하고 있다.
객체 지향 주요 기능은 추상화, 상속, 다형성, 캡슐화 이다.
Future Action
- 개념들이 너무 햇갈린다. 인터넷 자료들이 확실하다고 말 할 수 없으니 책이나 사서 보자.