본문 바로가기
창고(2021년 이전)

[JS] 함수형 프로그래밍 - 1_개요

by 측면삼각근 2019. 10. 28.
728x90
반응형

함수형 프로그래밍은 애플리케이션, 함수의 구성요소, 더 나아가서 언어 자체를 함수처럼 여기도록 만들고, 이러한 함수 개념을 가장 우선순위에 놓는다.

함수형 사고방식은 문제의 해결 방법을 동사(함수)들로 구성(조합)하는 것

/* 데이터(객체) 기준*/
duck.moveLeft();
duck.moveRight();
dog.moveLeft();
dog.moveRight();

/*함수 기준*/
moveLeft(dog);
moveRight(duck);
moveLeft({ x:5, y:2 });
moveRight(dog);

// 객체 지향 프로그래밍은 데이터를 디자인하고,데이터에 맞는 method를 디자인 하는 식으로 프로그래밍.
// 함수형 프로그래밍은 함수를 먼저 만들고 데이터를 넣는다.

 

 


성공적인 프로그래밍

모든 프로그래밍 패러다임은 성공적인 프로그래밍을 위해 존재한다.
성공적인 프로그래밍은 좋은 프로그램을 만드는 일이다.
좋은 프로그램은 -> 사용성, 성넝, 확장성, 기획 변경에 대한 대응력 등이 좋다.

이것들을 효율적이고 생산적으로 이루는 일이 성공적인 프로그래밍이다.

함수형 프로그래밍

함수형 프로그래밍은 성공적인 프로그래밍을 위해 부수효과를 미워하고 조합성을 강조하는 프로그래밍 패러다임이다.

  • 부수 효과를 미워한다. => 순수 함수를 만든다.
  • 조합성을 강조한다. -> 모듈화 수준을 높인다.
  • 순수함수 => 오류를 줄이고 안정성을 높인다.
  • 모듈화 수준이 높다. => 생산성을 높인다.

순수 함수 : 부수효과가 없는 들어온 인자가 같다면 항상 동일한 결과를 return 하는 함수이다. 함수가 받은 인자 외의 다른 외부의 상태에 영향을 끼치지 않는 함수. return 외에는 외부 소통 x

순수 함수의 조합으로 프로그래밍을 해나가면 오류는 적고 안정성은 적으면서 모듈화 수준이 높은 프로그램(성공적인 프로그래밍)을 만들었다고 할 수 있다.

 


 

순수함수

//순수 함수1
function add(a, b){
	return a+b;
}

//순수 함수 2
let obj1 = { val : 10 };
function add5(obj, b){
	return { val: obj.val + b};
}
//참조만 할 뿐 값이 변경되는 부분은 없다.
  1. 동일한 인자를 주면, 동일한 return 을준다.
  2. 부수효과가 없다.

 

순수 함수가 아닌경우 - 동일한 return 이 아닌경우

아래 경우 c가 변화가 있을 수 있다고 가정한다면 순수함수가 아니다.
하지만 const의 경우 순수함수라고도 할 수 있을 것이다.

let c = 10;
function add2(a, b){
	return a + b + c;
}

 

순수함수가 아닌경우 - 부수효과가 있는 함수

let c = 20;
function add3(a, b){
	c = b;
    return a + b ;
}

외부의 상태에 영향을 끼치는 다른 상태가 있다면 순수 함수가 아니게 된다.

 


일급함수 - 함수를 값으로 다룰 수 있다.

인자나 값으로 들고다닐 수 있다!

let f1 = function(a) {return a*a;};

function f3(f){
	return f();
}

console.log( f3(function() {return 10});) //10;

//함수 내부에서 함수를 평가 한 후 결과를 return 함

 


함수형 프로그래밍 예제 - add_maker

function add_maker(a){
	return function(b){//클로저 함수 이기도함.
    	return a + b;
    }
}

let add10 = add_maker(10);

console.log(add10(20));

 

일급함수와 순수함수를 사용한 케이스이다.

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

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

// 실무적으로 쓰일만한 코드는아니지만 형태를 위하여 구현함
// 함수적 로직을 볼것
// 각각의 함수들은 순수한 함수이며 이들을 조함하는 것이 함수형 프로그래밍이다.

 


 

 

 

 

 

 


 

재미 / 실시간성 라이브 방송, 실시간 댓글, 협업, 매신저
독창성 / 완성도 애니메이션, 무한 스크롤, 벽돌()
더 많아져야 하는 동시성 비동기 I/O, CSP, Actor, STM
더 빨라야하는 반응성 / 고가용성 ELB, Auto Scaling, OTP Supervisor
대용량 / 정확성 / 병렬성 MapReduce, Clojure Reducers...
복잡도 / MSA / ...(생산성) 많아지고 세밀해지는 도구들
  • 좋아지는 하드웨어 성능, 좋아지는 컴파일러
  • 함수형 프로그래밍 기술
  • 좋아지는 분산 / 리액티브 환경
  • 동시성 + 병렬성 관련 기술
  • 성공적인 적용 사례와 영향

 

반응형