Til Home

2020-08-04-TIL

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

  • 개념들이 너무 햇갈린다. 인터넷 자료들이 확실하다고 말 할 수 없으니 책이나 사서 보자.