FP   Functional Programming   함수형 프로그래밍

(2021-05-19)

함수형 언어, 함수형 프로그래밍 언어, Side Effect, 부수 효과, 부가 효과, 순수 함수

1. 함수프로그래밍 (Functional Programming)                    ☞ 프로그래밍 패러다임 참조함수들의 집합/조합으로써 프로그램을 구성
     - 프로그램 제어함수로써 추상화시킴

  ㅇ 큰 틀에서, 선언적/적응적 프로그래밍(Declarative/Applicative Programming) 기법에 속함
     - 외부에서의 부수 효과를 제거하고, 
     - 불변성을 지향하는 프로그램을 작성하고, 
     - 순수 함수선언적으로 사용하는 프로그래밍 방법론

  ㅇ 例) LISP, Scheme, Haskell 등


2. 함수프로그래밍의 특징반복문 보다는 재귀호출 선호
     - 임시 변수에 의한 반복문 처리 보다는 재귀호출에 의한 구현 선호
     - 재귀 호출이 기본이고, 괄호로 프로그램 내포구조를 나타냄
  ㅇ 실행시, 함수의 생성 및 동작이 가능함
  ㅇ 함수인수 또는 반환값으로 함수를 전달할 수 있음 (일급 함수)
  ㅇ 상태 변화를 줄이고, 적정 관리할 수 있도록 추구함

  ㅇ 통상, 가독성, 신뢰성, 정확성 면에서, 
     - 함수프로그래밍명령형 프로그래밍 보다 더 좋다고 여겨짐
     - 例로써, 
        . 명령형 프로그래밍은, 프로그램 실행 중 변수가 변하는 상태를 갖으므로, 이를 신경써야 하나,
        . 함수프로그래밍은, 변수상태를 갖지 않음

  ㅇ 무 상태성(stateless), 불변성(immutability)를 지향 함


3. 부수 효과 / 부가 효과 / 부작용 (Side Effect)표현식,함수 등이 결과값 만을 반환하는(돌려주는) 고유의 동작이 아니고,
     - 외부의 상태를 변경하거나,
        . 입력받거나, 출력하는 등 
     - 그 이후 구문에 영향을 주는 등 상태 변경이 일어나는 동작을 하는 것을 말함
        . 변수의 변경, 배열 항목의 변경, DB의 변경, 상태의 변화,
        . 함수로 들어온 인수의 원래 값을 직접 변경하는 등

  ㅇ 함수의 경우에,
     - 함수의 실행으로 인해, 함수 외부 상태가 영향을 받는 경우
     - 例) print() 함수는, 반환값 없이도 외부에 서식문자열에 따라 화면에 출력이 됨


4. 순수 함수 (Pure Function)

  ㅇ 주어진 입력에 만 의존할 뿐, 어떤 외부 상태에도 의존하지 않고, 
     - 함수 스코프 밖에 어떠한 변경도 하지 않으며, 
     - 미리 헤아릴 수 있는 일정한 결과값 만을 내놓는,
     - 즉, 부수 효과가 없고, 상태 변화를 일으키지 않는 함수

  ㅇ 순수성 (Purity) 또는 참조 투명성 (Referential Transparency)
     - 함수인수와 리턴값 사이에 순수한 매핑 관계 
     - 즉, 어떤 함수가 항상 동일 입력에 동일 출력 결과 만을 내는 관계
        . 함수 반환값이 외부 변수에 영향을 받으면 안됨


[프로그래밍 방법론] 1. 프로그래밍 기법 2. 구조적 프로그래밍 3. 명령형 프로그래밍 4. 객체지향 프로그래밍 5. 함수형 프로그래밍 6. 프로그램 제어
  1.   기술공통
  2.   기초과학
  3.   진동/파동
  4.   전기전자공학
  5.   방송/멀티미디어/정보이론
  6.   통신/네트워킹
  7.   정보기술(IT)
        1. 정보기술
    1.   전산기초
    2.   컴퓨터구조
    3.   프로그래밍
          1. 프로그램, 프로그래밍
      1.   프로그래밍 언어론
      2.   프로그래밍 방법론
        1.   1. 프로그래밍 기법
            2. 구조적 프로그래밍
            3. 명령형 프로그래밍
            4. 객체지향 프로그래밍
            5. 함수형 프로그래밍
            6. 프로그램 제어
      3.   객체지향 프로그래밍
      4.   자료표현코드
      5.   자료구조
      6.   알고리즘
      7.   시스템 소프트웨어
      8.   프로그래밍언어 종류
      9.   프로그래밍 기타일반
    4.   데이터베이스
    5.   소프트웨어 공학
    6.   운영체제
    7.   정보보호/보안
    8.   IT 기타기술
  8.   공학일반(기계,재료등)
  9.   표준/계측/품질
  10.   기술경영

 
        최근수정     요약목록     참고문헌