본문 바로가기
Programming/CS

함수형 프로그래밍

by Bam_t 2022. 1. 12.
728x90

함수형 프로그래밍(Functional Programming)은 선언형 프로그래밍과 순수 함수를 이용해서 문제를 해결하는 프로그래밍 패러다임 입니다. 문제를 여러개의 순수 함수들로 나눔으로써 얻는 이점은 코드의 가독성이 높아지고 유지보수성이 크게 증가한다는 것 입니다.


1. 프로그래밍 패러다임

서론에서 함수형 프로그래밍은 프로그래밍 패러다임의 하나라고 언급했는데, 프로그래밍 패러다임이란 무엇일까요?

프로그래밍 패러다임은 프로그래머에게 주는 프로그래밍 관점입니다. 이 관점에 따라서 같은 코드도 다른방식으로 짜게 됩니다. 흔히 듣는 객체지향 프로그래밍도 프로그래밍 패러다임의 방법 중 하나이고, 지난번에 소개한 명령형 프로그래밍과 선언형 프로그래밍도 프로그래밍 패러다임의 일종입니다.

 

 

2. 순수 함수

순수 함수란 함수형 프로그래밍에서 함수가 하나의 기능만을 하며 내부에서 데이터가 변하지 않으며 전역 상태가 존재하지 않는 함수를 의미합니다. 순수 함수의 조건은 다음과 같습니다.

즉, 순수 함수를 만들면, 함수 자체의 동작을 예측하기 쉬워지는 효과가 있어 유지보수와 가독성에 큰 도움을 주게 됩니다.

 

 

3. 함수형 프로그래밍

그러면 다시 주제로 돌아와서 이야기 하자면 함수형 프로그래밍은 순수 함수들로만 구성된 코드를 작성하는 프로그래밍 패러다임 입니다. 함수형 프로그래밍은 아래에 소개할 특징을 가진 언어들을 통해서 작성이 가능합니다. 대표적인 함수형 프로그래밍 언어는 Scala, Haskell, LISP 가 있습니다. 타입스크립트는 함수형 프로그래밍 언어는 아니고 함수형 프로그래밍 언어의 특징을 다수 제공하는 언어입니다.

함수형 프로그래밍은 함수를 일등 시민(First-class citizens)로 관리합니다. 일등 시민이라는 것은 함수 표현식을 통해 변수와 함수를 구분 짓지 않는 다는 것을 의미합니다. 변수와 함수를 구분짓지 않음으로써 함수를 함수의 인수로 전달할 수 있고, 함수에서 함수를 return하며, let 명령 변수 처럼 값의 할당과 변경이 자유롭다는 것 입니다.

함수형 프로그래밍에서는 고차 함수(High-order function) 개념을 이용합니다. 고차 함수는 함수에서 또 다른 함수를 반환하도록 해주는 함수를 말합니다. 고차 함수를 개념을 통해서 다양한 추상화가 가능해져 함수의 재사용성이 크게 높아집니다.

이 외에도 참조 투명성으로 기존 값을 유지하거나, 커링과 같은 특징을 함수형 프로그래밍 언어들은 가지고 있습니다.

이야기만 들으면 함수를 무한정으로 재사용 가능하고, 쉽게 예측 가능하며, 유지보수가 뛰어나다는 것을 알 수 있습니다. 그러나 이런 함수형 프로그래밍에도 단점이 있습니다.

함수형 프로그래밍 코드를 보면 기존의 명령형과 다르게 선언형을 통한 높은 추상화 레벨로 인해서 코드를 읽기가 어렵다는 단점이 있습니다. 또, 기존과는 다른 방식으로 코드를 작성해 자료구조 등의 차이가 발생하기도 합니다.


참조

https://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%ED%8C%A8%EB%9F%AC%EB%8B%A4%EC%9E%84

 

프로그래밍 패러다임 - 위키백과, 우리 모두의 백과사전

프로그래밍 패러다임(programming paradigm)은 프로그래밍의 패러다임 형태이다. 소프트웨어 공학을 할 때의 패러다임 형태인 방법론과 비교된다. 프로그래밍 패러다임은 프로그래머에게 프로그래밍

ko.wikipedia.org

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

 

함수형 프로그래밍 - 위키백과, 우리 모두의 백과사전

함수형 프로그래밍(函數型 프로그래밍, 영어: functional programming)은 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다. 명령형 프로

ko.wikipedia.org

 

https://medium.com/javascript-scene/master-the-javascript-interview-what-is-functional-programming-7f218c68b3a0

https://github.com/sunghoonma/Functional-Programming-in-Scala/wiki/1.-%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-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%3F

 

GitHub - sunghoonma/Functional-Programming-in-Scala

Contribute to sunghoonma/Functional-Programming-in-Scala development by creating an account on GitHub.

github.com

728x90

'Programming > CS' 카테고리의 다른 글

서버 사이드 렌더링과 클라이언트 사이드 렌더링  (0) 2022.02.05
명령형 프로그래밍과 선언형 프로그래밍  (0) 2021.12.31
SPA, Single Page Application  (0) 2021.12.09
OSI 7 Layer  (0) 2021.11.27
쿠키와 세션  (0) 2021.11.03

댓글