[JavaScript] 함수형 프로그래밍이 뭐야?

정예원·2021년 8월 29일
0

JavaScript

목록 보기
2/13

2주전 함수형 프로그래밍 과제를 제출하는 나.. 그게 뭔지는 알고 하고있니?
아니야 너 잘몰라..그만둬..

멘토님의 그래서 함수형 프로그래밍이 뭔데요? 라는 질문에 나는 답을 하지 못하였고,,
그렇다 나는 설명도 못하는 그것을 과제로 제출하고 있었던 것이다.

프로그래밍 패러다임


최근의 프로그래밍 패러다임은 크게 두가지로 구분할 수 있다.
1. 명령형 프로그래밍

  • 무엇을(What) 할 것인지 보다 어떻게(How) 할 것인지를 설명하는 방식이다.
  • 절차지향(C, C++)과 객체지향(Java, C#)이 있다.

2. 선언형 프로그래밍

  • 어떻게(How) 할것인지 나타내기보다 무엇을(What) 할 것인지를 설명하는 방식이다.
  • 클로저, 하스켈, 리스프

함수형 프로그래밍


개발자들은 소프트웨어의 크기가 커짐에 따라, 복잡하게 엉켜있는 코드를 유지보수하는 것에 어려움을 갖게 되었다. 그리고 이를 해결하기 위해 함수형 프로그래밍이 등장했다.
함수형 프로그래밍은 거의 모든 것을 순수 함수로 나누어 문제를 해결하는 기법으로,
작은 문제를 해결하기 위한 함수를 작성하여 가독성을 높이고 유지보수를 용이하게 한다.

함수형 프로그래밍의 특징

부수 효과(side effect)가 없는 순수 함수를 1급 객체로 간주하여
파라미터로 넘기거나 반환값으로 사용할 수 있으며,
참조 투명성을 지킬 수 있다.

이 어려운 문장을 자세히 살펴보자.

side effect가 뭐야?

부수 효과는 다음과 같은 변화 또는 변화가 발생하는 작업을 의미한다.

  • 변수의 값이 변경된다.
  • 자료 구조를 제자리에서 수정한다.
  • 객체의 필드값을 설정한다.
  • 예외나 오류가 발생하며 실행이 중단된다.
  • 콘솔 또는 파일 I/O가 발생한다.

순수 함수를 1급 객체로 간주한다?

순수함수(pure function)는 위에서 설명한 부수 효과(side effect)들을 제거한 함수,
즉, 함수의 실행이 외부에 영향을 끼치지 않는 함수를 의미한다.
따라서 순수함수는 병렬적인 계산이 가능하다.

  • 메모리 I/O 관점에서 side effect가 없는 함수
  • 함수의 실행이 외부에 영향을 끼치지 않는 함수

1급 객체로 간주한다는 의미는 아래와 같다.

  • 변수나 데이터 구조 안에 담을 수 있다.
  • 파라미터로 전달할 수 있다.
  • 반환값으로 사용할 수 있다.
  • 할당에 사용된 이름과 무관하게 고유한 구별이 가능하다.

참조 투명성은 뭔데?

참조 투명성이란 다음과 같다.

  • 동일한 인자에 대해 항상 동일한 결과를 반환해야 한다.
  • 참조 투명성을 통해 기존의 값은 변경되지 않고 유지된다.
profile
hello world!

0개의 댓글