본문 바로가기
Apple/RxSwift

[RxSwift] 함수형 프로그래밍

by 어멘드 2023. 8. 8.
반응형

RxSwift가 따르고 있는 함수형 프로그래밍 패러다임이 무엇인지 알아보자.

 

프로그래밍 패러다임이란

 패러다임이란 '사람들의 견해나 사고를 근본적으로 규정하고 있는 테두리로서의 인식의 체계'를 말한다. 그런데 프로그래밍에서의 패러다임은 대체 뭘 말하는 것일까? 프로그래밍 패러다임을 이해하기에 좋은 설명을 위키피디아에서 발견했다.

프로그래밍 패러다임은 프로그래머에게 프로그래밍의 관점을 갖게 해주고, 결정하는 역할을 한다. 예를 들어 객체지향 프로그래밍은 프로그래머들이 프로그램을 상호작용하는 객체들의 집합으로 볼 수 있게 하는 반면에, 함수형 프로그래밍은 상태값을 지니지 않는 함수값들의 연속으로 생각할 수 있게 해준다.

 객체지향 프로그래밍에서는 실제 세계를 반영하고자 프로그램을 객체와 객체들의 상호작용으로 보았다. 이렇게 '프로그래밍의 근간이 되는 생각 체계' 정도로 이해해볼 수 있겠다. 더불어 함수형 프로그래밍도 언급하고 있는데, 함수형 프로그래밍은 그 이름처럼 프로그램을 상태값을 지니지 않는 함수값들의 연속으로 생각하는 패러다임이라고 한다. 함수형 프로그래밍에 대해 좀 더 알아보자.

 

함수형 프로그래밍이란

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

 역시 위키피디아를 통해 정의를 찾아보았다. 첫번째 정의문은 방금 살펴본 문장과 유사해보인다. 그런데 함수형 프로그래밍은 또 선언형 프로그래밍 패러다임을 따른다고 한다. 선언형 프로그래밍에 대해서는 아래 별도의 포스트로 정리하였다.

 

[RxSwift] 선언형 프로그래밍

RxSwift는 함수형 프로그래밍 패러다임을 따른다. 그리고 함수형 프로그래밍은 선언형 프로그래밍 패러다임을 따른다. 선언형 프로그래밍 패러다임을 공부해보자. 선언형 프로그래밍의 정의 위

please-amend.tistory.com

 

Immutability

 지금까지 살펴본 함수형 프로그래밍에 대한 두 문장에서 '상태값을 지니지 않는', '상태와 가변 데이터를 멀리하는' 같은 중복된 표현들이 나왔다. 함수형 프로그래밍의 핵심 원리는 Immutability(불변성)이다. Mutable한 데이터는 동시성을 다룰 때 Race Condition 등의 문제가 발생한다. 반면 Immutable한 데이터는 동시성 문제로부터 안전하고 자유롭다. 내가 접근하려는 데이터를 누구도 수정하지 않았고 수정하지 않을 것이라는 것이 보장되기 때문이다.

 데이터 변경없이 대체 어떻게 프로그래밍을 하라는 걸까? 5+1을 해야 한다고 하자. 5라는 데이터에 1을 올려서 6으로 변경시키는 대신, 5에 1을 더한 6이라는 새로운 데이터를 만들어버리면 된다. 이것이 Immutability의 기본 아이디어이다.

 

함수

 두번째로 중복되는 표현은 '함수값들의 연속', '자료 처리를 수학적 함수의 계산으로 취급'이다. 함수형 프로그래밍은 함수들의 조합으로 데이터를 변환하고 처리한다. 이 함수들은 일급 객체이면서 순수 함수인데, 각각이 무엇인지 살펴보자.

일급 객체

 값으로 취급되어서 변수나 자료구조에 저장 가능하고, 다른 함수에 인자로 전달하거나 반환값으로 사용될 수 있는 객체

 따라서 함수형 프로그래밍에서는 함수를 다른 함수에 인자로 전달하거나 반환값으로 사용할 수 있다. 함수를 인자로 받거나 반환하는 함수를 고차함수라고 한다.

순수 함수

 특정 입력에 대해 항상 동일한 출력을 반환하며, 부작용이 없는 함수

 순수 함수는 수학적 함수와 같이 함수에 입력된 인수에만 의존하여 인수 x에 같은 값을 넣고 함수 f를 호출하면 항상 f(x)라는 같은 결과가 나온다. 이러한 순수함수의 특성을 참조 투명성이라고 한다. 참조 투명성을 가지기 때문에 프로그램의 동작을 예측하기가 쉽고, 따라서 디버깅과 테스트가 쉬워진다. 또한 부작용이 없다는 말은 외부의 어떠한 상태도 영향을 주지 않는다는 뜻이다. 따라서 동시에 여러 스레드에서 안전하게 호출되어 병렬 실행될 수 있다.

 

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

 함수형 프로그래밍은 불변성참조 투명성을 강조한다. 이러한 특성은 코드의 안정성과 예측 가능성을 향상시키고, 디버깅과 테스팅을 용이하게 만든다. 또한 함수들이 상태를 공유하지 않고 부작용이 없기 때문에 동시성 문제 해결에 용이하여 병렬 및 분산 처리에 적합하다.


레퍼런스

https://ko.wikipedia.org/wiki/프로그래밍_패러다임
https://ko.wikipedia.org/wiki/함수형_프로그래밍
https://www.geeksforgeeks.org/functional-programming-paradigm/
https://mangkyu.tistory.com/111
https://www.learningjournal.guru/article/scala/functional-programming/immutability-in-functional-programming/
https://nittaku.tistory.com/196

반응형

'Apple > RxSwift' 카테고리의 다른 글

[RxSwift] 리액티브 프로그래밍  (0) 2023.08.12
[RxSwift] 선언형 프로그래밍  (0) 2023.08.08

댓글