반응형

🚀

객체지향은 동작하는 부분을 캡슐화하여 이해할 수 있게 하고, 
함수형 프로그래밍은 동작하는 부분을 최소화해서 코드 이해를 돕는다.

- 마이클 페더스. 레거시 코드 활용 전략中

 

 

🌏 프로그래밍 패러다임

프로그래밍 패러다임은 프로그래머에게 프로그래밍의 관점을 갖게 하고 결정하는 역할을 합니다.

  • 명령형 프로그래밍 : 프로그래밍의 상태와 상태를 변경시키는 구문의 관점에서의 연산을 설명
    절차 지향 프로그래밍 : 수행되어야 할 연속적인 계산 과정을 포함(C, C++)
    객체 지향 프로그래밍 : 객체들의 집합으로 프로그램의 상호작용을 표현(C++, Java, C#)

  • 선언형 프로그래밍 : 어떻게(HOW) 할 것인가 보다는 무엇(WHAT)을 할 것인가를 표현
    함수형 프로그래밍 : 순수 함수를 조합하고 프로그램을 만드는 방식(Clojure, Haskell, Elixir)

 

 

💻 함수형 프로그래밍

함수형 프로그래밍(Functional Programming)은 계산을 수학적 함수의 평가로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임입니다. 부수 효과(Side Effect)를 제거할 경우 프로그램의 동작을 이해하고 예측하기 쉬워지기 때문에 부수 효과가 없는 순수 함수(Pure Function)들로만 작성됩니다.

- 부수 효과(Side Effect)란?

  • 콘솔에 출력하거나 사용자의 입력을 읽는 것
  • 변수를 수정하거나, 객체의 필드를 저장하는 것
  • 예외를 던지거나 오류를 발생시키며 실행을 중단하는 것
  • 파일에 읽고 쓰는 작업

 

 

🔎 함수형 프로그래밍의 특징

순수 함수(Pure function)

  • 부수 효과가 없는 함수
  • 함수의 실행이 외부에 영향을 끼치지 않는 함수
  • 같은 입력에 있어서 항상 동일한 출력을 냄

참조 투명성(Referential transparency)

  • 프로그램의 변경 없이 어떤 표현식을 값으로 대체할 수 있다는 의미

불변성(Immutable)

  • 함수 외부에서 데이터를 수정하지 않음
  • 함수의 계산을 수행하는 동안 변수에 할당된 값들이 절대로 변하지 않음

일급 객체(First object, First class citizen)

  • 1급 함수라고도 함
  • 변수나 자료 구조안에 삽입 가능
  • 파라미터로 전달 가능
  • 동적으로 property 할당 가능
  • 리턴 값으로 사용 가능

고차 함수(High order function)

  • 함수를 다루는 함수
  • 함수의 인자로 함수 전달 가능
  • 함수의 리턴 값으로 함수 사용 가능

익명 함수(Anonymous function)

  • 이름이 없는 함수
  • 람다식으로 표현되는 함수 구현

게으른 평가(Lazy evaluation)

  • 코드 실행 즉시 값을 평가하는 것이 아닌 필요한 시점에 평가

 

💎 함수형 프로그래밍의 장점

  • 사용하는 모든 데이터가 변경 불가능(immutable)하고 함수는 부수 효과를 가지고 있지 않기 때문에 동시성과 관련된 문제를 원천적으로 차단
  • 함수는 입력과 그에 대한 출력만을 책임지기 때문에 테스트가 쉽고 가독성이 좋음
  • 고차 함수로 인해 함수들 간의 결합, 조합이 간결해지며, 익명 함수를 사용할 수 있음
  • 코드 재사용성이 높음
  • 깔끔하고 유지보수가 용이함

 

 

 

📚 참고

https://ko.wikipedia.org/wiki/%ED%95%A8%EC%88%98%ED%98%95_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

반응형

+ Recent posts