본문 바로가기
Software Engineering

Functional Programming

by orioncsy 2023. 5. 17.

Functional Programming

개념

함수형 프로그래밍

  • 자료처리를 함수의 계산으로 취급하고 상태와 가변 데이터를 피하는 프로그래밍
  • 명령형 프로그래밍과 대조되는 선언형 프로그래밍 패러다임을 따른다.

프로그래밍 패러다임

명령형 프로그래밍

  • 상태를 변경하는 관점을 강조하는 방식
  • 어떻게 프로그래밍할 것인지를 설명하는 방식
  • 객체 지향
    • 객체들의 집합으로 상호작용하는 프로그래밍
  • 절차 지향
    • 수행되어야 할 과정을 설명하는 프로그래밍

선언형 프로그래밍

  • 어떻게 할 것인지 보다 무엇을 할 것이지를 설명하는 방식
  • 함수형 프로그래밍
    • 순수함수를 조합하고 소프트웨어를 만드는 방식

함수형 프로그래밍

등장 배경

  • 명령형 프로그래밍에서 복잡한 코드의 가독성과 유지보수를 위해 고안
  • 모든 문제를 순수함수로 나누어 문제를 해결하는 방식

개념 이해

  • 대입문을 사용하지 않는 프로그래밍
  • 작은 문제를 해결하기 위한 함수 작성
  • 무엇을 하는지가 중요하기 때문에 출력하는 함수를 파라미터로 넘길 수 있다.

특징

  • 부수효과가 없는 순수 함수를 1급 객체로 파라미터나 반환값으로 사용할 수 있고 참조 투명성을 유지한다.
  • 부수 효과
    • 변수 값 변경
    • 자료 구조를 제자리 수정
    • 객체의 필드 값 설정
    • 예외나 오류로 실행 중단
    • 콘솔이나 I/O 발생
  • 순수 함수
    • 부수 효과들을 제거한 함수
    • 함수의 실행이 외부에 영향을 끼치지 않는 경우
    • 메모리나 I/O의 관점에 부수 효과가 없는 경우
    • 함수가 독립적이라서 스레드 안정성을 보장받아 병렬처리를 동기화 없이 가능
  • 1급 객체
    • 변수나 데이터 구조 안에 담을 수 있다.
    • 파라미터로 전달 가능
    • 반환값 사용 가능
    • 할당에 사용된 이름과 무관하게 고유한 식별 가능
  • 참조 투명성
    • 동일한 인자에 대해 항상 동일한 결과를 반환
    • 기존 값은 변경되지 않고 유지
    • 부수 효과를 제거하여 항상 동일한 결과를 반환하고 기존의 값은 변경하지 않는다.
    • 병렬 처리 환경에서 값의 대입 없이 동일한 실행에 대해 동일한 결과를 반환

활용

  • 자바에서는 streamAPI를 통해 함수형 프로그래밍을 실현할 수 있다.
  • 지역변수를 없애고 부수 효과를 제거하여 병렬처리가 용이하고 가독성이 뛰어나다.
  • 그러나 for문 같은 명령형 프로그래밍에 비해 속도 측면에서는 상대적으로 불리하다.
    • 함수 자체를 파라미터로 전달하면서 오버헤드 발생

Reference

https://mangkyu.tistory.com/111

'Software Engineering' 카테고리의 다른 글

Computer Structure  (0) 2023.05.16
Von Neumann Architecture  (0) 2023.05.14
UI/UX  (0) 2023.05.05
WAS & Web Server  (0) 2023.05.01
PWA  (0) 2023.04.29