#TIL38, 함수형 프로그래밍

April·2021년 7월 6일
0

🌹CS

목록 보기
9/17
post-thumbnail

개인 공부를 위해 작성했습니다

패러다임: 프로그래밍 패러다임은 개발자에게 프로그래밍의 관점을 갖게하고 결정하는 역할을 한다


함수형 프로그래밍

functional programming: 자료처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임

함수형 프로그래밍은 계산을 수학적 함수의 조합으로 생각하는 방식을 말한다. 이것은 일반적인 프로그래밍 언어에서 함수가 특정 동작을 수행하는 역할을 담당하는 것과는 반대되는 개념으로, 함수를 수행해도 함수 외부의 값이 변경될 수 없다.

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

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

    • 함수형 프로그래밍: 순수 함수를 조합하고 소프트웨어를 만드는 방식 (클로저, 하스켈, 리스프)
    • 반응형 프로그래밍(Reactive Programming): 선언형 프로그래밍이라고도 불리며, 명령형 프로그래밍(imperative programming)의 반대말

명령형과 선언형의 프로그래밍 비교

  • 명령형: 알고리즘을 명시하고 목표는 명시 안함.
  • 선언형: 알고리즘 명시하지 않고 목표만 명시.
  • "명령형 프로그래밍은 어떻게 할 것인가(How)를 표현하고, 선언형 프로그래밍은 무엇을 할 것인가(What) 표현한다."

함수형 프로그래밍의 특징

immutable data

함수형 프로그래밍에서는 데이터가 변할 수 없는데, 이를 불변성 데이터라고 한다. (자바스크립트는 가능하지만 불가능한 언어들이 있다)

데이터 변경이 필요한 경우, 원본 데이터 구조를 변경하지 않고 그 데이터를 복사본을 만들어 그 일부를 변경하고, 변경한 복사본을 사용해 작업을 진행한다.

Array.map, Array.reduce

const 키워드와 불변은 구분해야 한다. constObject로 사용되는 경우 변경 가능하다.

  • immutable vs mutable
    • immutable이란 말 그대로 변경 불가능함을 의미.
    • immutable 객체는 객체가 가지고 있는 값을 변경할 수 없는 객체
    • immutable 객체의 값이 변경될 경우, 새로운 객체를 생성하고 변경된 값을 주입하여 반환해야 한다.
    • 이와는 달리, mutable 객체는 해당 객체의 값이 변경될 경우 값을 변경한다.

first class citizen으로서의 function

함수형 프로그래밍 패러다임을 따르고 있는 언어에서의 함수(function)는 일급 객체(first class citizen)로 간주된다.
(1급 객체 (First Object, 또는 1급 시민)

  • 변수나 데이터 구조안에 함수를 담을 수 있다
  • 함수의 파라미터로 전달할 수 있고,
  • 함수의 반환값(return value)으로 사용할 수 있다.
  • 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
  • 동적으로 프로퍼티 할당이 가능하다.

    자바스크립트에서 함수(Function)는 객체(Object)이므로 1급 함수로 불린다.

함수형 프로그래밍을 배워야 하는 이유?

"일반적인 프로그래밍은 그냥 생각하면 되는 것이고, 함수형 프로그래밍은 기존과 다르게 생각하는 방법을 알려줄 것이다. 그러므로 당신은 아마도 예전 방식으로 절대 돌아가지 않을 것이다."

  • 함수형 프로그래밍은 프로그래밍 언어나 방식을 배우는것이 아니라 함수로 프로그래밍하는 사고를 배우는것이라고 할 수 있다.
  • 즉, 새로운 계산방법을 배우는 것처럼 사고의 전환을 필요로 한다. 다양한 사고방식으로 프로그래밍을 바라보면 더욱 유연한 문제해결이 가능해진다.

✨ tl;dr

✔️ 함수형(선언형) 프로그래밍이란?

  • 순수 함수를 조합하고 소프트웨어를 만드는 방식
    "명령형 프로그래밍은 어떻게 할 것인가(How)를 표현하고, 선언형 프로그래밍은 무엇을 할 것인가(What) 표현한다."
profile
🚀 내가 보려고 쓰는 기술블로그

0개의 댓글