Javascript란? - 개념편

javascript 는 함수형 프로그래밍 언어이다.



함수형프로그래밍이란?

  • 함수사용을 강조하는 소프트웨어 개발스타일이다.
  • 함수형 프로그래밍의 목표는 애플리케이션의 부수효과(side effect)를 방지하고 상태변이(mutation of state)를 감소하기 위해 데이터의 제어흐름과 연산을 추상하는 것이다.
  • 작은 함수들을 재료로 새로운 함수들을 만든다.
  • 직관적이다.

개념
1. 선언적(declarative) 프로그래밍 패러다임에 속하다.
내부적으로 코드를 어떻게 구현했는지, 데이터는 어떻게 흘러가는지 밝히지 않은채 연산/작업을 표현하는 사상이지요.
선언적 프로그래밍은 프로그램의 서술부(desciption)와 평가부(evaluation)를 분리하여, 제어흐름이나 상태변화를 특정하지 않고도 프로그램 로직이 무엇인지를 표현식으로 나타냅니다. 
같은 작업이라도 함수형으로 접근하면, 개발자가 각 요소를 올바르게 작동시키는 일에만 전념하고 루프제어는 시스템의 다른 파트에 일임할 수 있습니다. 
함수형 프로그래밍은 무상태성과 불변성을 지향합니다. 무상태코드는 전역상태를 바꾸거나 혼선을 일으킬 가능성이 단 1%도 없습니다. 상태를 두지 않으려면 부수효과와 상태 변이를 일으키지 않은 순수함수를 써야 합니다.
2.순수함수와 부수효과
순수함수 특징
  • 주어진 입력에만 의존할 뿐, 평가 도중 또는 호출 간 변경될 수 있는 숨겨진 값이나 외부 상태와 무관하게 작동합니다.
  • 전역 객체나 레퍼런스로 전달된 매개변수를 수정하는 등 함수 스코프 밖에서 어떠한 변경도 일으키지 않습니다.
  • 순수함수는 서명에 정규 매개변수(입력집합)를 빠짐없이 명시하므로 코드를 이해하고 사용하기가 쉽습니다. 
  • 함수가 일관된 반환값을 보장하도록 해서 전체 함수 결과를 예측 가능한 방향으로 유도하면 여러모로 이롭습니다. 이것이 참조 투명성이라는 순수함수 본연의 특징입니다.
부수효과가 발생하는 상황들
  • 전역 범위에서 변수, 속성, 자료구조를 변경
  • 함수의 원래 인수 값을 변경
  • 사용자 입력을 처리
  • 예외를 일으킨 해당 함수가 붙잡지 않고(catch) 그대로 예외를 던짐(throw)
  • 화면 또는 로그 파일에 출력
  • HTML문서, 부라우저 쿠키, DB에 질의

3. 참조투명성과 치환성

어떤함수가 동일한 입력을 받았을때 동일한 결과를 내면 이를 참조 투명한 함수라고 한다. 테스트하기 쉽고 전체 로직을 파악하기 쉬운 특징이 있다. 이런 식으로 구축한 프로그램은 시스템의 상태를 머릿속으로 그려볼 수 있고 코드를 재작성하거나 치환하더라도 원하는 결과를 얻을 수 있기 때문에 헤아리기가 쉽습니다.

4.불변데이터 유지하기

불변 데이터는 한번생성된 후에는 절대 바뀌지 않는다.


함수형 프로그래밍 요약  

함수형 프로그래밍은, 외부에서 관찰 가능한 부수효과가 제거된 불변 프로그램을 작성하기 위해 순수함수를 선언적으로 평가하는 것입니다.

출처 : 책(함수형 자바스크립트 - 루이스 아텐시오 지음)

댓글

가장 많이 본 글