-함수형 프로그래밍
함수형 프로그래밍은 소프트웨어를 구성하는 패러다임 중 하나이다. 패러다임 종류에는 객체지향 프로그래밍, 절차 프로그래밍 그리고 함수형 프로그래밍이 있다.
패러다임 중에서 함수형 프로그래밍은 오류를 줄이고, 모듈화를 강조한다.
또한, 언제 평가해도 같은 값을 출력하는 순수 함수들을 만들고 순수 함수들을 값으로 들고 다니면서필요한 시점마다 평가하면서 만드는 로직을 만든다.
함수형 프로그래밍에서 핵심은
1. 순수 함수(pure functions)
동일한 인자가 들어올 경우 항상 동일한 값을 출력한다. 또한, 리턴 값 이외에는 외부와 소통하지 않는다. 따라서 외부의 변수를 수정하지 못한다. 이를 부수효과가 없다 라고 한다. 부수효과란, 외부의 상태에 영향을 미치는 것을 부수효과라고 한다. 이런 순수 함수는 평가 시점이 중요하지 않다.
-순수 함수 예제
1. 기본
function add(a, b){
return a + b
}
console.log(add(10,5)); // 15 출력
console.log(add(10,4)); // 14 출력
console.log(add(10,3)); // 13 출력
어디에서 출력 해도 동일한 인자를 주었을때 항상 동일한 값을 출력한다. add()에 들어가는 인자만 달라질 뿐 출력은 항상 동일한 값을 출력한다.
2. 외부에 영향을 주지 않는다.
var obj = {
val : 10,
}
function add5(a, b){
return {test : obj.val + b}
}
console.log(obj.val); // 10 출력
console.log(add5(obj, 20)); // {test : 30} 출력
console.log(obj.val); // 10 출력
function add5(a, b){
return { test : obj.val + b }
}
add5()에 인자로 obj.val값을 넣고 return 시켜도 외부 obj에는 변화가 없다.
-순수 함수가 아닌 예제
1. 인자의 값 변경
var c = 20;
function add2(a,b){
return a + b + c
}
console.log(add2(10,1)); // 31 출력
c = 30;
console.log(add2(10,1)); // 41 출력
c = 30
처음 console.log(add2(10,1)) 출력 이후 전역 변수 c의 값을 30으로 바꿨다. 이렇게 되면 다음번에 add2()를 출력할 경우 값이 달라진다.
2. 부수효과를 일으키는 함수
var d = 10;
function add3(a,b){
d = b;
return a + b;
}
console.log(d); // 10 출력
add3(20,30);
console.log(d); // 30 출력
function add3(a, b){
d = b;
return a + b;
}
add3(a, b)에서 변수 d를 인자 값 b로 바꾸기 때문에 add3()가 실행되고 나면 d의 값은 변경이 된다.
3. 외부 값 변경
var obj1 = { val : 10 };
function add4(obj, b){
obj.val += b;
}
console.log(obj1.val); // 10 출력
add4(obj1, 20);
console.log(obj1.val); // 30 출력
function add4(obj, b){
obj.val += b;
}
add4()에서 obj.val값을 변경시켜 외부 obj1의 val값이 변경된다.
-함수형 프로그래밍 예제
1. add maker 예제
function add_maker(a){
return function(b){
return a + b;
}
}
var add10 = add_maker(10);
console.log(add10(20)); // 30 출력
var add 10 = add_maker(10)
add_maker(a)에 10이 인자로 넘어가고 var add 10은 아래와 같이 풀이할 수 있다.
var add10 = function(b){
return 10 + b;
}
이후,
console.log(add 10(20))
add 10(20)에 인자 20을 넣게 되면 function(b)에 20이 들어가게 된다.
2.
공부 출처 : 인프런 강좌
'개발노트 > Javascript' 카테고리의 다른 글
(JS) filter() (2019/10/14)(보충필요!) (0) | 2019.10.14 |
---|---|
(JS) 객체(Object) (2019/10/10) (0) | 2019.10.10 |
(JS) forEach() (2019/10/3) (0) | 2019.10.03 |
(JS) push() (2019/10/2) (0) | 2019.10.02 |
(JS) charAt() (2019/10/1) (0) | 2019.10.01 |
주니어 개발자의 성장 기록지
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!