1 minute read

함수형 프로그래밍

순수 함수를 조합해서 소프트웨어를 만드는 방식
  • 프로그래밍 패러다임

    • 명령형과 선언형

      명령형은 어떻게 할 것인가(How)를 표현하고, 선언형은 무엇을 할 것인가(What)를 표현함

      • 명령형

        프로그래밍의 상태와 상태를 변경시키는 구문의 관점에서 연산을 설명하는 방식

        절차지향 : 수행되어야 할 연속적인 계산 과정을 포함하는 방식

        알고리즘을 명시하고 목표는 명시 안 함

      • 선언형

        어떤 방법으로 해야 하는지(How)를 나타내기 보다 무엇(What)과 같은지를 설명하는 방식

        함수형 : 순수 함수를 조합하고 소프트웨어를 만드는 방식(클로저, 하스켈, 리스프)

        알고리즘을 명시하지 않고 목표만 명시

  • 함수형 프로그래밍

    • 왜 해야함?

      프로그래밍 언어나 방식을 배우는 것이 아니라 함수로 프로그래밍 하는 사고를 배울 수 있음

      다양한 사고 방식으로 프로그래밍을 바라볼 수 있기 때문에 더욱 유연한 문제해결이 가능해짐

    • 명령형과의 비교

      함수형은 계산을 수학적 함수의 조합으로 생각하는 방식으로 생각하는 방식이며 일반적인 프로그래밍 언어에서 함수가 특정 동작을 수행하는 역할을 담당하는 것과는 반대의 개념으로, 함수를 수행해도 함수 외부의 값이 변경될 수 없음

    • 필요한 개념

      • 1급 객체

        다음과 같은 조건을 만족하는 객체

        • 변수나 데이터 구조안에 담을 수 있음

        • 파라미터로 전달할 수 있음

        • 반환값으로 사용할 수 있음

        • 할당에 사용된 이름과 관계없이 고유한 구별이 가능

        • 동적으로 프로퍼티 할당이 가능

        JS 에서 함수는 객체 이므로 1급 함수로 불림

      • 고차 함수

        람다 계산법에서 만들어진 용어로 아래 조건을 만족하는 함수

        • 함수에 함수를 파라미터로 전달할 수 있음

        • 함수의 반환값으로 함수를 사용할 수 있음

        고차 함수는 1급 함수의 부분 집합 (Subset)

        React 의 고차 컴포넌트(HOC) 는 컴포넌트를 사용하여 위의 조건을 만족하는 컴포넌트

      • 불변셩

        변할 수 없는 데이터

        데이터 변경이 필요한 경우, 원본 데이터 구조를 변경하지 않고 그 데이터의 복사본을 만들어 작업을 진행함

        const 는 Object 로 사용되는 경우 변경이 가능함

      • 순수 함수

        함수형 프로그래밍에 필요한 개념

        아래 조건을 만족하는 함수

        • 동일한 입력에는 항상 같은 값을 반환

        • 함수의 실행은 프로그램의 실행에 영향을 미치지 않아야 함(Side Effect 가 없어야 함)

      • 데이터 변환방법

        불변성 유지의 도구들이 필요함

        JS 에서는 데이터 복사본을 만들기 위한 함수들을 제공함

      • 합셩 함수

        새로운 함수를 만들거나 계산하기 위해 둘 이상의 함수를 조합하는 과정

        함수형은 여러 작은 순수 함수들로 이루어져있기 때문에 이 함수들을 연쇄적으로나 병렬로 호출해 더 큰 함수를 만드는 과정으로 전체 프로그램을 구축해야 함

    • 구현하는 방법

      함수형은 순수 함수(Pure Function)을 조합하고 공유 상태(shared state), 변경 가능한 데이터(mutable data), 부작용(side effect) 를 피하여 소프트웨어를 반드는 프로세스

      함수형은 명령형이 아닌 선언형이며 App의 상태는 순수 함수를 통해 전달됨