본문 바로가기

Java/Functional Programming

[FP] 함수형 프로그래밍이란?

출처

https://mangkyu.tistory.com/111

 

[프로그래밍] 함수형 프로그래밍(Functional Programming) 이란?

1. 함수형 프로그래밍(Functional Programming)에 대한 이해 [ 프로그래밍 패러다임(Programming Paradigm) ] 프로그래밍 패러다임(Programming Paradigm)은 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를

mangkyu.tistory.com


프로그래밍의 패러다임

  • 명령형 프로그래밍 : 무엇(What)을 할 것인지 나타내기 보다 어떻게(How) 할 건지를 설명하는 방식
    • 절차지향 프로그래밍 : 수행되어야 할 순차적인 처리 과적을 포함하는 방식(C, C++)
    • 객체지향 프로그래밍 : 객체들의 집합으로 프로그램의 상호작용을 표현(C++, Java, C#)
  • 선언형 프로그래밍 : 어떻게 할 건지(How)를 나타내기보다 무엇(What)을 할 건지를 설명하는 방식
    • 함수형 프로그래밍 : 순수 함수를 조합하고 소프트웨어를 만드는 방식(클로저, 하스켈, 리스프)

함수형 프로그래밍의 등장 배경 및 특징

가독성을 높이고 유지보수를 용이하게 해준다.
  • 개발하는 소프트웨어의 크기가 커짐에 따라, 스파게티 코드를 유지보수하기 힘들다는 것을 깨달았다.
  • 대입문(등호가 등장하는 줄 하나, 변수대입, ...)이 없는 프로그래밍

 

부수 효과가 없는 순수 함수를 1급 객체로 간주하여 파라미터나 반환값으로 사용할 수 있으며, 참조 투명성을 지킬 수 있다.
  • 부수 효과(Side Effect)
    • 변수의 값 변경, 객체의 필드값 설정, 예외/오류 발생으로 인한 실행 중단과 같은 변화 또는 변화가 발생하는 작업
  •  순수 함수(Pure Function)
    • Memory or I/O관점에서 Side Effect가 없는 함수, 함수의 실행이 외부에 영향을 끼치지 않는 함수
    • 장점 : Thread Safe하기 때문에 병렬처리를 동기화 없이 진행할 수 있다.
  • 1급 객체(First-Class Object)
    • 변수나 데이터 구조 안에 담을 수 있다.
    • 파라미터로 전달할 수 있다.
    • 반환값으로 사용할 수 있다.
    • 할당에 사용된 이름과 무관하게 고유한 구별이 가능하다.
  • 참조 투명성(Referential Transparency)
    • 동일한 인자에 대해 항상 동일한 결과를 반환해야한다.
    • 기존의 값은 변경되지 않고 유지된다.(Immutable Data)