티스토리 뷰

RxSwift 는

Reactive Extension Swift, Swift를 사용하여 Reactive Programming을 도와 주는 일종의 API 입니다.


Reactive Programming은  OOP 개념과 같은 일종의 개발 패러다임입니다.


위키페디아를 인용 하자면 (영어를 잘 못하므로 이해부탁드립니다.)

In computingreactive programming is a declarative programming paradigm concerned with data streams and the propagation of change. 

"컴퓨팅에서, 반응형 프로그래밍은 데이터스트림들과 변화의 전파와 관계되어 있는 선언적인 프로그래밍 패러다임이다. " 라고 합니다. 


이렇게 보니 선언형 프로그래밍이란 말이 너무 막연하게 느껴집니다.


그렇다면, 선언형 프로그래밍의 이해를 돕기위해 

먼저 우리가 익숙한 명령형 프로그래밍에 대해 알아보도록 합시다.

멍령형(imperative)은 말그대로 명령하는 식으로 프로그래밍 하는 것입니다.


<명령형 프로그래밍으로 우유 사서 냉장고에 넣기> 

- 시작

- 당신의 주머니에 열쇠 배열을 유지하기 위한 공간을 만든다.

- 주머니에 열쇠 배열을 넣는다.

- 차고로 가라.

- 차고를 열어라.

- 차에 타라

.

.

.

- 우유를 냉장고에 넣어라


이러한 식으로 하나하나 시간의 순서대로 명령하듯 프로그래밍 하는게 명령형 프로그래밍입니다.

대부분 우리는 이러한 식으로 프로그래밍을 배우고 해왔죠. (저 역시도 마찬가지입니다.)

이러한 명령형 프로그래밍이 이제는 너무 익숙해 프로그래밍에 있어서 너무 당연한것으로 느껴집니다. 


그렇다면, 선언형 프로그래밍이란 무엇 일까요?

똑같이 우유를 사서 냉장고에 넣는 알고리즘을 선언형 프로그래밍으로 해석 해보겠습니다.


<선언형 프로그래밍으로 우유 사서 냉장고에 넣기>

- 유당을 소화하는데 문제가 없다면, 우유는 건강 음료이다.

- 일반적으로 우유는 냉장고에 저장한다.

- 냉장고는 물건을 시원하게 유지하는 상자이다.

- 상점은 상품이 판매되는 장소이다.

- 판매란 돈을 위해 사물을 교환하는 것을 의미한다.


어떠신가요? 명령형 프로그래밍과 선언형 프로그래밍의 차이가 느껴지시나요?

선언형은 명확한 알고리즘을 명시하지 않습니다. 다만, 데이터가 잘 흘러갈 수 있도록 제시(선언)만 해줍니다.


위키페디아를 통해서 선언형 프로그래밍과 멍령형 프로그래밍을 비교해봅시다. (다행이 한글로 잘 되어있네요)


 프로그램이 어떤 방법으로 해야 하는지를 나타내기보다 무엇과 같은지를 설명하는 경우에 "선언형"이라고 한다. 예를 들어, 웹 페이지는 선언형인데 웹페이지는 제목, 글꼴, 본문, 그림과 같이 "무엇"이 나타나야하는지를 묘사하는 것이지 "어떤 방법으로" 컴퓨터 화면에 페이지를 나타내야 하는지를 묘사하는 것이 아니기 때문이다. (중략)

명령형 프로그래밍 언어는 프로그래머가 실행될 알고리즘을 명시해주어야 하는 것이다. 간단히 말하여, 명령형 프로그램은 알고리즘을 명시하고 목표는 명시하지 않는 데 반해 선언형 프로그램은 목표를 명시하고 알고리즘을 명시하지 않는 것이다.


명령형 프로그래밍은 알고리즘을 명시하고 목표를 명시하지 않는 데 반해, 선언형 프로그래밍은 목표를 명시하고 알고리즘을 명시하지 않는다. 라고 합니다.


여기까지 알아봐도 왜 선언형 프로그래밍을 사용하는지는 잘 모르겠습니다. 다만, 

선언형 프로그래밍은 앞서 말했듯이 프로그래밍 패러다임 입니다. 왜 이걸 쓰는지에 대한 궁금증은 잠시 뒤로 물어두고

이러한 방법으로 프로그래밍을 접근한다고 생각하면됩니다.


RxSwift를 사용하기위해선 앞서 설명했던 선언형 프로그래밍에 대한 기본 지식을 가지고 계셔야 쉽게 이해하실 수 있습니다.

선언형 프로그래밍은 함수형 프로그래밍을 포함합니다. 다시 말하면 함수형 프로그래밍은 선언형 프로그래밍의 하위 카테고리라는 것이죠.


이번에도 위키페디아에 함수형 프로그래밍을 찾아봅시다

함수형 프로그래밍은 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다. 명령형 프로그래밍에서는 상태를 바꾸는 것을 강조하는 것과는 달리, 함수형 프로그래밍은 함수의 응용을 강조한다. 


이 설명을 봐도 함수형 프로그래밍을 명령형 프로그래밍과 비교하여 설명을 합니다.

설명을 보면 "자료 처리를 수학적 함수의 계산으로 취급, 상태와 가변데이터를 멀리한다" 라고 합니다.

이 설명에서 가변 데이터를 멀리한다에 초점을 맞춰봅시다.


일반적인 명령형 프로그래밍에서는 할당으로 데이터 상태를 바꿉니다. 데이터가 변한다는 것을 의미하죠.

하지만 함수형 프로그래밍에서는 데이터를 변하게 하지 않는다는 것을 기본으로 합니다.


명령형 프로그래밍에는 (OOP) 에서 다형성, 캡슐화 등등의 특징을 가지듯 함수형 프로그래밍에도 몇가지 특징을 가집니다.


1. 데이터의 불변

x =1 이라고 정의를 했다면 x 는 1입니다. 불변의 원칙을 가집니다.

그렇다면 2라는 데이터가 필요하다면 명령형 프로그램에서는 x = 2 라고 데이터를 변하게 만들지만 

함수형 프로그래밍에서는 그냥 변수 하나를 더 만들어 x1 =2를 담습니다.


2. 순수 함수 (pure function)

순수함수란 Side-effect가 없는 함수 즉, 함수의 실행이 외부에 영향을 끼지치 않는 함수를 뜻합니다.

위키 페디아에서 찾아보면 (안타깝게도 영어입니다.)

In computer programming, a pure function is a function that has the following properties:[1][2]

  1. Its return value depends only on its parameters and not on any internal or external state (such as local static variablesnon-local variables or inputs from I/O devices).
  2. Its evaluation has no side effect (such as mutation of local static variables or non-local variables, or performing I/O operations).

1. 반환 값은 오직 파라미터들에만 의존하며 절대 내부, 외부의 상태에 의존하지 않는다.
2. 실행은 side effect를 하지지 않는다.

라고 설명하고 있습니다. 아래에 좀 더 자세히 특징을 써보면

 - 입력으로 주어진 것 외의 연산은 실행하지 않는다.

 - side-effect가 없어야 한다.

 - 입력이 동일하다면 출력도 동일해야한다.

 - 상태의 변화가 없어야 한다.


3. 익명함수 (anonymous function) 

swift에서는 클로저(closure)라고 부르는 익명함수를 사용합니다.


4. 고차함수 (High - Order function) 

고차함수의 뜻을 위키페디아에서 에서 찾아보면 


고차 함수(高次函數, higher-order function)는 수학과 컴퓨터 과학에서 적어도 다음 중 하나를 수행하는 함수이다.[1] [2] [3]

  • 하나 이상의 함수를 인수로 취한다. (예: 절차적 매개변수)
  • 함수를 결과로 반환한다.


결과를 반환하고, 하나 이상의 함수를 인수로 취한다고 합니다.

swift에서는 fileter, map, reduce와 같은 함수를 의미합니다.


여기까지 함수형 프로그래밍의 특징들을 살펴봤습니다. 

RxSwift에서 바로 이 함수형 프로그래밍을 활용 하기 때문에 이와 같은 지식이 기본적으로

깔려 있으셔야 이해하시기 쉽습니다.


마지막으로 위의 내용들을 포괄하여 RxSwift를 배우기 위해선 ( 곰튀김님의 말을 빌리자면)


1. 데이터는 불변하게 취급하자 (함수형 프로그래밍)

2. 데이터 변경이 필요하다면 새로 만들자 (함수형 프로그래밍)

3. side effect를 없애기 위해 순수 함수를 사용하자 (함수형 프로그래밍)

4. 함수들의 집합과 고차함수를 사용하여 프로그램을 만들자 (함수형 프로그래밍)

5. 데이터가 아닌 프로세스에 집중해서 프로그램을 만들자 (선언형 프로그래밍)


ps. 본인이 공부하기 위해 요약한 글로써 이글은 Zedd0202 님의 라는 글을 "왕초보를 위한 <Reactive programming이 뭔지 알기 전에> 라는 글을 베이스로 정리한 글입니다.


출처 - https://en.wikipedia.org/wiki/Pure_function

출처 - https://ko.wikipedia.org/wiki/고차_함수

출처 - https://ko.wikipedia.org/wiki/선언형_프로그래밍

출처 - https://en.wikipedia.org/wiki/Reactive_programming

출처 - http://zeddios.tistory.com/303

출처 - https://ko.wikipedia.org/wiki/함수형_프로그래밍

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

RxSwift를 사용한 MVVM-C 패턴  (1) 2018.10.15
RxSwift 전반적 개념 정리  (2) 2018.10.15
RxSwift를 배우기 전 필요한 개념정리  (1) 2018.08.03
댓글
댓글쓰기 폼