블로그 이전했습니다!
https://computasha.com/basic/term/프로그래밍+패러다임%2C+함수형+프로그래밍




💫 프로그래밍 패러다임

프로그래밍 패러다임(Programming Paradigm)은 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를 어떻게 작성할지 결정하는 역할을 한다. 새로운 프로그래밍 패러다임을 통해서는 새로운 방식으로 생각하는 법을 배우게 되고, 이를 바탕으로 코드를 작성하게 된다.

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

    • 절차지향 프로그래밍 : 수행되어야 할 연속적인 계산 과정을 포함하는 방식 (C, C++)
    • 객체지향 프로그래밍 : 객체들의 집합으로 프로그램의 상호작용을 표현 (C++, Java, C#)
  • 선언형 프로그래밍 : 어떤 방법으로 해야 하는지(How)를 나타내기보다 무엇(What)과 같은지를 설명하는 방식

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

명령형 프로그래밍에서는 알고리즘을 명시하고 목표는 명시 안 함. 선언형 프로그래밍에서는 알고리즘은 명시하지 않고 목표만 명시한다.


즉 명령형 프로그래밍은 어떻게 할 것인가(How)를 표현하고, 선언형 프로그래밍은 무엇을 할 것인가(What)를 표현한다.

명령형프로그래밍vs함수형프로그래밍


🧘🏻 함수형 프로그래밍의 특징

  1. Pure Functions (순수 함수)

    함수에서 외부의 상태 값을 참조하거나 또는 외부의 상태를 변경하는 것은 순수 함수가 아님. 동일한 인자를 넣었을 때, 항상 동일한 결괏값을 반환하고 언제 선언이 되었는지 외부의 영향을 받지 않도록 작성해야 함. 함수 안에서 외부의 상태 값을 변경한다면, 그건 함수형 프로그래밍이 아니라 절차지향적 프로그래밍일 확률이 높음.

  2. Stateless, Immutability (비상태, 불변성 유지)

    함수에 인자로 전달된 데이터를 변경하는 것은 절대 함수형이 아님. 함수형에서는 전달된 데이터를 변경하는 것이 아니라, 새로운 버전의, 새로운 오브젝트를 만들어서 결괏값으로 전달해야 한다. 외부의 상태나 함수에 인자로 전달된 데이터의 상태를 변경하지 않음으로써 side effect(부작용, 함수를 호출하면 외부의 상태가 변경되거나, 예상하지 못한 에러가 발생하는 등)를 만들지 않으므로 불변성을 유지하기 때문에 여러 가지 동시다발적인 멀티쓰레딩 환경에서도 안정적으로 동작할 수 있음.

  3. Expressions Only!! (not statments like if, switch, for…)

    if나 switch, for과 같은 여러 가지 문장(expressions)를 사용하는 것은 함수형 프로그래밍이 아님. for loop를 이용해서 배열을 하나하나씩 돌고 있다면 함수형 프로그래밍이라고 할 수 없음. 그런 문장 없이 프로그래밍해나가야 한다.

  4. First-class and higher-order functions (일급함수이자 고차함수)

    다른 데이터와 마찬가지로 함수를 변수에 할당하거나 함수에 인자로 전달하거나 리턴하는 등의 일들을 할 수 있는 First Class(일급 함수) 특징과 함수 자체를 인자로 전달하거나 함수에서 또 다른 함수를 리턴하는 고차함수, 이 두 가지 속성을 가지고 있어야 한다.


더 알아보기…

  • 명령형 프로그래밍을 기반으로 개발했던 개발자들은 개발하는 소프트웨어의 크기가 커짐에 따라, 복잡하게 엉켜있는 스파게티 코드를 유지보수하는 것이  매우 힘들다는 것을 깨닫게 되었다. 그리고 이를 해결하기 위해 함수형 프로그래밍이라는 프로그래밍 패러다임에 관심을 갖게 되었다. 함수형 프로그래밍은 거의 모든 것을 순수 함수로 나누어 문제를 해결하는 기법으로, 작은 문제를 해결하기 위한 함수를 작성하여 가독성을 높이고 유지보수를 용이하게 해준다. (병렬적, 안정적)

  • 클린 코드 저자는 함수형 프로그래밍을 대입문이 없는 프로그래밍이라고 정의했다.

  • UI 애플리케이션은 특성상 많은 상태 변화가 일어나기 때문에 순수 함수형 프로그래밍만을 이용해서 개발하기에는 무리가 있다. 함수형과 반응형을 결합한 함수형 반응형 프로그래밍을 이용하거나 객체지향 프로그래밍에서 함수형 프로그래밍의 특징을 결합해서 조금 더 안정적인 프로그래밍이 가능하다.

  • 함수형 프로그래밍의 다양한 개념들 : Monad, Semigroup, Applicative, Monaid, Functor, Disjunction



참고 사이트

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

함수형 프로그래밍에 관해

함수형 프로그래밍 요약

함수형프로그래밍이 대세다?! (함수형 vs 객체지향)