함수형 프로그래밍(1)

Siwoo Pak·2022년 1월 5일
0

Javascript

목록 보기
28/34

정의

  • 성공적인 프로그래밍을 위해 부수효과를 미워하고 조합성을 강조하는 프로그래밍 패러다임
    • 부수효과를 미워한다 -> 순수함수를 만든다
    • 조합성을 강조한다 -> 모듈화 수준을 높인다.
    • 순수함수 -> 오류를 줄이고 안전성을 높임
    • 모듈화 수준이 높다 -> 생산성 증가
  • 순수함수들을 만들고 조합하는 것을 말함.
  • "애플리케이션, 함수의 구성요소, 더 나아가서 언어 자체를 함수처럼 여기도록 만들고, 이러한 함수 개념을 가장 우선 순위에 놓는다."
    "함수형 사고방식은 문제의 해결방법을 동사(함수)들로 구성(조합)하는 것" by 마이클 푸거스(클로저 프로그래밍의 즐거움에서)

순수함수

  • 동일한 인자를 넣었을 때 동일한 결과를 리턴하는 함수
  • 평가시점이 중요하지 않다.
// 순수함수
function add(a, b) {
  return a+b;
}

console.log(add(5,10))

let c = 10;
// 순수함수 x
function add2(a,b) {
  return a+b+c;
}
console.log(add(5,10))
c = 4;
console.log(add(5,10))

// 순수함수 x
let d = 20;
function add3(a,b) {
  d = b;
  return a+b;
}
console.log(add(5,10))
console.log('d:', d)
  • 함수형 프로그래밍에선 객체를 다룰 수 없는가?
    객체의 값들을 변형해나가는데, 원래의 값은 그대로 두고 새로운 값을 만들어서 변형시킨다.
// 순수 함수를 사용한 함수형 프로그래밍에서 객체의 값 변형
let obj1 = {val: 10};
function add5(obj1,b){
  return {val: obj1.val + b}
}
console.log(obj1.val);
var obj2 = add5(obj1, 20);
console.log(obj1.val);
console.log(obj2.val)

일급함수

  • 예제1
// 함수를 
const f1 = function(a) {return a*a};
console.log(f1);

const f2 = add;
console.log(f2);
  • 예제2
function add_maker(a) {
  return function(b) {
    return a+b;
  }
}
const add10 = add_maker(10);
console.log(add10(20));

const add5 = add_maker(5);
const add15 = add_maker(15);

console.log(add5(10));
console.log(add15(10));

function f4(f1,f2,f3) {
  retunr f3(f1()+f2());
}

f4(
  function() {return 2;},
  function() {return 1;},
  function(a) { return a*a;})
);

요즘 개발 이야기

  • 재미/실시간성: 라이브방송, 실시간 댓글, 현업, 메신저
  • 독창성/완성도: 애니메이션, 무한스크롤, 벽돌
  • 더 많아져야하는 동시성: 비동기 입출력, CSP, Actor, STM, ...
  • 더 발라야하는 반응성/고가용성: ELB, 오토 스케일링, OTP 슈퍼바이저, ...
  • 대용량/정확성/병렬성: 맵리듀스, 클로저 레듀서, ...
  • 복잡도 / MSA / ...: 많아지고 세밀해지는 도구들
  • FP(함수형 프로그래밍)
    • 좋아지는 하드웨어 성능
    • 좋아지는 컴파일러
    • 함수형 프로그래밍 기술
    • 좋아지는 분산/리액티브 환경
    • 동시성+병렬성 관련 기술
    • 성공적인 적용사례와 영향

FP와 OOP

  • 예제 코드
// 데이터(객체) 기준
// 객체가 먼저 나오냐
duck.moveLeft();
duck.moveRight();
dog.moveLeft();
dog.MoveRight();

// 함수 기준
// 함수가 먼저 나오냐
moveLeft(dog);
moveRight(duck);
moveLeft({x: 5, y:2});
moveRight(dog);
  • OOP는 데이터를 먼저 디자인하고 그 데이터에 맞는 메서드를 만드는 식으로 프로그래밍, FP 함수를 만들고 그 함수에 맞게 데이터셋을 구성하는게 함수형 프로그래밍
  • animal 클래스를 만든 다음 오리와 강아지가 상속을 받아서 사용한다면, 함수형은 메서드를 만들고 그에 맞는 데이터 타입을 만드는 것.
  • 함수형 어떻게 전환해 왔는가?

추가 공부할 것들

profile
'하루를 참고 인내하면 열흘을 벌 수 있고 사흘을 참고 견디면 30일을, 30일을 견디면 3년을 벌 수 있다.'

0개의 댓글