일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- NewServer
- URIMalformedURI오류
- TargetObject
- ModulesPath
- URI$MalformedURIException
- URIMalformedURIException
- Spring
- AfterReturnning
- URIMalformedURI
- LexicalScope
- SpringFramework
- map
- Annotation
- REGEXP_COUNT
- xml
- tomcat
- SQL
- ProjectFacets
- jdk
- oracle
- Eclipse
- curryr
- 일급객체
- javacversion
- AOP
- springversion
- 자유변수
- ArrayLike
- joinpoint
- javaversion
- Today
- Total
잼's Tech
[함수형 프로그래밍] Functional Programming 본문
[함수형 프로그래밍] Functional Programming
JS에서는 함수 자체를 값으로 취급이 가능하다
함수형 프로그래밍
= 부수 효과를 피하고 조합성을 높인다.
= 대부분 순수 함수를 이용하여 문제를 해결하는 기법
- 가독성이 높다.
- 모듈화 수준이 높다. => 유지보수가 용이하고 생산성이 높다.
앞으로 이 카테고리에서는 함수형 프로그래밍에 대하여 배우고 나중에 ES6를 이용할 것인데 우선 함수형 프로그래밍에서 사용하는 단어들에 대하여 배우고 가자
- 순수 함수
순수함수란 부수 효과가 없는 함수들을 일컫는다.
※부수효과는 밑의 것들을 말한다.
1) 객체의 필드 값을 설정
2) Console이나 File의 입출력이 발생
3) Exception이나 예외로 인한 실행 중단
4) 변수 Data의 구조를 바로 수정
5) 변수의 값 변경
결국, 순수 함수란 언제든 동일한 파라미터가 들어온다면 동일한 결과값을 돌려주는 것을 말한다.
순수 함수로 개발을 하게 될 시의 장점
1) 외부에 영향이 가지 않는다.
2) 평가 시점이 중요하지 않다.
( 언제든 동일한 입력 시 동일한 결과값이니 어느 시점에서든 동일한 결과값을 준다.)
1) 어느 시점에서든 같은 입력값이라면 동일한 결과값을 반환한다.
2) 변수 d가 상수이기에 값을 바꿀 수 없으므로 이것은 순수함수다.
1) 변수 c의 값이 바뀌면 동일한 입력값이라도 다른 결과값을 반환한다.
2) 외부에 영향을 끼치므로 순수함수가 아니다.
1) obj의 val이 바뀌었다. = 외부 영향을 끼쳤으므로 순수 함수가 아니다.
2) 새로운 객체를 반환함으로서 외부에 영향을 끼치지 않았으므로 순수 함수다.
- 일급 함수
= 함수를 값으로서 취급
이런 코딩이 가능하게 된다.
※ 함수 선언식, 함수 표현식
함수에 명칭을 주는 것을 함수 선언식
함수를 변수에 담는 것을 함수 표현식
이라 한다.
- 클로저와 자유 변수
클로저
= 일급 함수에서 나타나는 데 반환된 내부 함수가 선언 당시의 환경을 기억하여 자신의 선언 당시 환경 밖에서 호출이 되어도 그 환경에 접근할 수 있는 함수다.
= 결국, 생성 당시의 환경을 기억하는 함수
이것이 가능한 것은 렉시컬 스코프 덕분이다.
※ 렉시컬 스코프
https://jaem-tech.tistory.com/4
자유 변수
= 클로저에 의해 참조되는 외부함수의 변수
add1에는 addMaker(1)을 통해 a에 1의 값을 주었고
add2에는 addMaker(2)를 통해 a에 2의 값을 주었다.
add1과 add2를 출력하여 보면 값은 보이지 않는다.
하지만, add1의 function에서 a는 1의 값을 기억하고 있고
add2의 function에서 a는 2의 값을 기억하고 있다.
다시 add1(10)과 add2(10)을 하여 호출하였을 때 자신의 밖에 있는 a의 값을 가지고 와서 사용하고 있다.
function(b){ return a+b; }가 클로저
a가 자유 변수로서 작동하고 있다.
'JS > ES6 & 함수형 프로그래밍' 카테고리의 다른 글
[함수형 프로그래밍] Array vs ArrayLike (0) | 2021.08.23 |
---|