함수형 프로그래밍이란 무엇인가?

Jason Kim·2020년 5월 4일
0

이 시리즈는 "스칼라로 배우는 함수형 프로그래밍"을 TypeScript로 실습한 내용을 정리하고 있습니다.

1. 함수형 프로그래밍이란 무엇인가?

많은 사람들이 좋다고 여기는 생각을 논리적인 극한까지 밀어붙이는, 적용할 수 없을 것 같은 상황에도 적용하는 규율.

프로그램을 작성하는 방식에 대한 제약이지 표현 가능한 프로그램의 종류에 대한 제약이 아니다.

순수 함수 사용의 효능

  • 모듈성 증가
  • 모듈성은 test, 재사용, 병렬화, 일반화, 분석이 쉽다.
  • 더 나아가서 버그가 생길 여지가 훨씬 적다.

부수 효과가 있는 프로그램의 단점

  • testability가 떨어진다.
    • 설계를 변경해 볼 필요가 있다.
  • 재사용이 어렵다.
    • 함수 자체에 결제를 요청하는 부수효과가 있다면 여러건의 결제에 대해서 해당건수만큼 청구가 일어나게 된다.
  • 해법: 부수효과를 제거하고 청구건을 하나의 값으로 돌려주기
    • 청구건의 생성 문제를 청구건의 처리 또는 연동 문제와 분리시킴
    • 재사용성과 합성 능력이 증가
  • 프로그램의 행동에 관한 추론이 어려워진다.

순수 함수

  • 결과값이 오직 입력값에 의해서만 결정되는 함수
  • 입력이 주어지는 방식과 결과를 처리하는 방법을 신경쓰지 않는다.
  • 입력은 함수의 인자로 주어지고 결과는 단지 함수 호출자에게 돌려주기만 할 뿐이다. 그 전 후의 과정에 대해서는 신경쓰지 않는다.

참조 투명성

  • 표현식의 한 속성. 프로그램에 출현하는 어떤 표현식을 그 평가 결과로 바꾸어도 의미가 변하지 않는다면 그 표현식은 참조에 투명하다.
  • 함수가 수행하는 모든 것이 함수가 돌려주는 값으로 대표된다는 불변 조건을 강제
  • 계산이 등치 대 등치 치환을 통해서 진행 되므로 프로그램에 대한 등식적 추론이 가능하게 한다.

표현식

  • 프로그램을 구성하는 코드 중 하나의 결과로 평가될 수 있는 임의의 코드 조각

치환 모형

  • 추론이 간단
  • 부수 효과가 국소적

기타 생각

  • 부수효과를 함수 내부에서 직접 일으키지 말고 first-class 값으로 만들기
    • Charge의 예제
  • 너무 간결한 코드는 읽기 어려울 수 있다.
    • 익숙함의 문제가 아닐지?

0개의 댓글