카테고리 없음

함수형 프로그래밍(Functional Programming)

또또니엘 2024. 2. 4. 01:54

함수형 프로그래밍이란?

✏️  ☑️프로그래밍 패러다의 하나로 프로그래밍 패러다임 중 ☑️선언형 프로그래밍에 속하며, ☑️순수 함수(Pure Function)를 조합하여 프로그램을 만드는 방식을 말한다.

 

더보기

✅  순수 함수(Pure Function) : 함수는 주어진 입력으로 계산하는 것 이외에 프로그램의 실행에 영향을 미치지 않아야 하며, 이를 부수 효과(side effect)라고 하고 이러한 함수를 순수 함수라고 한다.

 

순수 함수의 장점 :

  • 함수 자체가 독립적이며 Sids-Effect가 없기 때문에 Thread에 안정성을 보장받을 수 있다.
  • 함수의 실행이 외부에 영향알 끼지치 않는 함수

 

✅  프로그래밍 패러다임 : 개발자가 프로그래밍을 위해 어떠한 '관점'을 가지고 개발을 할지에 대해서 결정을 하는데 도움을 주는 것을 의마하며 이러하면 프로그래밍 패러다임은 크게 두가지로 나눌 수 있다.



1️⃣  명형형 프로그래밍 :

✏️   프로그램의 상태와 상태를 변경시키는 구문의 관점에서 연산을 설명하는 프로그래밍 패러다임의 일종이다. 쉽게 설명하자면, 컴퓨터가 수행할 명령들을 순서대로 써 놓은 것이라고 볼 수 있다.

  •  절차적 프로그래밍 : ☑️프로시저(Procedure)를 이용해 순차적인 처리를 중요시 여기는 패러다임|
    ✅  프로시저(Procedure) - 루틴, 서브루틴, 메소드, 함수 등
  • ☑️객체 지향 프로그래밍 : 객체들의 집합으로 프로그래밍의 상호작용을 표현
    ✅  객체 - 여기서 객체란 하나의 역할을 수행하는 '메소드와 변수(데이터)'의 묶음으로 봐야 한다.
2️⃣  선언형 프로그래밍 : 

✏️  선언형 프로그래밍은 보통 두 가지 뜻으로 통용된다.

 

첫 번째는 프로그램이 무엇을 해야 할지를 나타내는 경우를 선언형이라고 한다. 예를 들어 컴퓨터 화면에 웹 페이지를 나타낼 때 "어떤 방법"으로 페이지를 나타내야 하는지 보다 제목, 본문, 그림 등과 같이 "무엇"을 화면에 나타내야 할지를 고민하는 것이 선언형 프로그래밍이다.

 

두 번째는 프로그램이 함수형, 논리형, 제한형 프로그래밍 언어 등으로 작성된 경우에 선언형이라고 한다. \

  • 함수형 프로그래밍

 

💎   특징

  • 순수 함수 (Pure Function)
  • 비상태, 불변성(Statelee, Immutability)
    - 함수형 프로그래밍에서의 데이터는 변하지 않는 불병성을 유지해야 한다.
    - 데이터 변경이 필요한 경우, 원본 데이터 구조를 변경하지 않고 그 데이터의 복사본을 만들어서 그 일부를 변경하고, 변경한 복사본을 사용해 작업을 진행한다.
  • 선언형 함수 (Expressions)
    - 명령형 프로그래밍은 무엇을 어떻게 할 것인가에 주목하고, 선언헌 프로그래밍은 무엇을할 것인가에 주목한다.
    - 함수형 프로그래밍에서는 명령문(if,switch,for등...)을 사용하지 않고 함수형 코드
    (filter,map,take,reduce 등...)로 사용해야한다.
  • 1급 객체와 고차함수
    - 변수나 데이터 구조안에 담을 수 있다.
    - 파라미터로 전달 할 수 있다.
    - 반환값(return value)으로 사용할 수 있다.
    - 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
    - 동적으로 프로퍼티 할당이 가능하다.

    고차함수 
    - 함수를 인자로써 전달 할 수 있어야 한다.
    - 함수의 반환 값으로 또 다른 함수를 사용 할 수 있다

 

🎈  장점

  • 높은 수준의 추상화를 제공함
  • 함수 단위의 코드 재사용이 수월
  • 불변성을 지향하기 때문에 프로그램의 동작을 예측하기 쉬워짐

❗️  단점

  • 순수 함수를 구현하기 위해서는 코드의 가독성이 좋지 않을 수 있음
  • 순수함수를 사용하는 것은 쉬울 수 있지만 조합하는 것은 쉽지 않음

참조 :

1️⃣  https://adjh54.tistory.com/97

2️⃣  https://code-lab1.tistory.com/245

3️⃣  https://code-lab1.tistory.com/244

4️⃣  https://minsone.github.io/programming/pure-function

5️⃣  https://velog.io/@younoah/programming-paradigm

6️⃣  https://jongminfire.dev/%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%9D%B4%EB%9E%80