본문 바로가기

기타

함수형 프로그래밍

안녕하세요 우디입니다!

 

이번 글에서는 함수형 프로그래밍에 대해 알아볼거에요.

절차 지향 프로그래밍, 객체 지향 프로그래밍에 대해 들어본 적은 있어도,

함수형 프로그래밍에 대해 못들어보신 분도 있을 것 같아 공부해봤습니다.

(사실 제가 못들어봐서 공부했습니다)

 

 

함수형 프로그래밍이란?

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

명령형 프로그래밍에서는 상태를 바꾸는 것을 강조하는 것과는 달리 함수형 프로그래밍은 함수의 응용을 강조한다.

 

따라서 외부의 상태나 값을 변경하지 않는 순수 함수를 통해 프로그램을 구성한다.

(위키백과 - 함수형 프로그래밍)

 

순수 함수

함수형 프로그래밍의 특징 중 하나인 순수 함수는 부작용이 없는 함수를 의미합니다. 함수의 실행은 외부에 영향을 끼치지 않으며, 스레드 세이프하며 병렬적인 계산이 가능합니다. 

 

조금 더 풀어서 이야기하자면 어떤 함수에 동일한 매개변수가 주어졌을 때 항상 같은 값을 리턴하는 함수이자 외부의 상태를 변경하지 않는 함수를 의미합니다.

 

선언형 프로그래밍과 명령형 프로그래밍의 차이

명령형 프로그래밍

let numbers = [1,2,3,4,5,6,7,8,9]
var evenNumbers = []

for number in numbers {
	if number % 2 == 0 {
    	evenNumber.append(number)
    }
}

프로그램이 어떻게 동작해야 할지 하나하나 선언해야 한다.

(for문을 통해 numbers의 원소를 다 확인하고, 확인하는 원소의 값이 2로 나눴을 때 나머지가 0일 경우 evenNumber에 추가한다...)

 

선언형 프로그래밍

let numbers = [1,2,3,4,5,6,7,8,9]

var evenNumbers = numbers.filter{ $0 % 2 == 0 }

배열의 메소드로 있는 filter는 고차함수로서 기존의 데이터를 복사해 주어진 조건에 따라 동작한 후 결과물을 새로 만들어 반환한다.

즉 선언형 프로그래밍은 어떤 매개변수의 값을 변경하지 않고, 외부의 값을 변경하지도 않으며 동작의 결과를 새로운 값으로 만들어 반환든다.

 

함수형 프로그래밍을 사용하는 이유?

순수 함수들을 통해 프로그램을 구현하면 모듈화 수준이 높아져 재사용성이 좋아지고, 함수들이 외부의 상태를 변경하지 않고 비동기작업에 용이하다고 볼 수 있습니다.

 

그리고 무엇보다! iOS 앱 개발에 많이 사용되는 RxSwift는 선언형 프로그래밍이기 때문에 함수형 프로그래밍 패러다임을 이해할 필요성이 있습니다.

(사실은 Swift도 자체적으로 함수형 프로그래밍에 대한 개념도 녹아 있습니다. 배열에서 사용하는 고차함수 등이 있듯이요!)

 

함수형 프로그래밍과 관련된 Swift 개념 중에는 고차함수(high-order function)도 있으니 다음에 알아보도록 하겠습니다.

'기타' 카테고리의 다른 글

디지털 트윈  (0) 2023.06.26
[모니터 리뷰] 삼성 스마트 모니터 M7 S43AM700  (0) 2022.02.18
읽기 쉬운 코드를 짜기 위한 고민  (0) 2021.09.23