상세 컨텐츠

본문 제목

함수형 프로그래밍

카테고리 없음

by 둥근돔 2023. 11. 9. 15:32

본문

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

 

함수는 코드 구성의 기본이며 모든 고차원 프로그래밍 언어에 존재한다. 일반적으로 함수형 프로그래밍은 깨끗(clean)하고 유지보수가 쉬운 소프트웨어를 만들기 위해 함수를 최상의 효과로 사용하는 것을 의미한다. 

 

가끔 함수형 프로그래밍을 객체지향 프로그래밍(OOP) 혹은 절차적 프로그래밍의 반대 개념으로 생각하는 경우가 있다. 하지만 셋은 상호 배타적이지 않으며 대부분의 시스템은 이 세 가지 모두를 사용하는 경향이 있기 때문에 오해의 소지가 있다. 

 

함수형 프로그래밍 언어로 분류되는 대표적인 언어로는 SQL, Scala, Clojure 등이 존재한다.

 

이러한 함수형 프로그래밍은 다음과 같은 특징들을 가진다.

 

  • 함수형 프로그래밍은 과정(Process)보다 결과(Result)에 관심이 많다.
  • 무엇(What)이 실행될 지를 강조한다.
  • 데이터는 불변(immutable)하다.
  • 함수형 프로그래밍은 문제를 함수로 분해(Decompose)한다.
  • 함수형 프로그래밍은 수학적 함수의 개념에 기반한다.
  • 함수형 프로그래밍은 If-Else와 같은 조건문 혹은 반복문을 지원하지 않는다.

순수 함수(Pure Functions)

 

함수형 프로그래밍의 이상(ideal)은 순수 함수라고 알려져있다. 순수 함수는 입력 파라미터에만 의존하며, 부수 효과를 일으키지 않는 함수를 뜻한다. 함수형 프로그래밍은 순수 함수를 통해 불변하는 데이터의 특징을 가질 수 있다.

 

이러한 순수 함수의 아름다움은 단순함에 있다. 순수 함수는 오직 인수(arguments)와 반환 값으로만 환원된다. 즉, 순수 함수는 정의된 API를 통해서만 외부 시스템과 상호 작용하여 결과를 만들어낸다. 쉽게 말해 정해진 입력 값을 주면 정해진 반환 값을 주기만 할 뿐, 부수 효과가 발생하지 않는 단순한 구조를 가지고 있는 것이다.

 

바로 이점이 객체 지향 프로그래밍(이하 OOP)과 다른 점이다. OOP는 객체의 메서드가 객체의 상태(혹은 객체의 멤버)와 상호작용하며 외부 상태가 함수 내에서 조작되고는 한다. 

 

일급 객체 함수(First Class Functions)

 

순수 함수라는 이상(ideal)을 넘어, 실제 함수형 프로그래밍은 일급 객체 함수에 의존한다. 일급 객체란 다음과 같은 특징을 가진 객체를 뜻한다.

 

  • 변수나 데이터 구조 안에 담을 수 있다.
  • 파라미터로 전달 할 수 있다.
  • 반환 값으로 사용할 수 있다.
  • 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
  • 동적으로 property 할당이 가능하다.

함수형 프로그래밍에서 함수는 일급 객체로 취급된다. 따라서 일급 객체 함수란 일급 객체로 취급되는 함수를 뜻한다.

 

이러한 일급 객체 함수는 사용에 제한이 없기 때문에 프로그램 내 어디서든 사용할 수 있어 유연(flexible)하고 유용하다.

 

출처: https://code-lab1.tistory.com/245 [코드 연구소:티스토리]