본문 바로가기

iOS/RxSwift

RxSwift) RxSwift가 도대체 뭔데요(Reactive Programming)

 

 

 

안녕하세요!! 소들입니다 :>

저는 Let's Swift 티케팅에 낙제하고 

퇴근 후 포스팅이나 쓰는 사람입니다 ㅋㅋ;;;;;

 

아쉬움은 뒤로하고

RxSwift의 드디어 첫 걸음마 포스팅을 써보려고 합니다

RxSwift... 어찌보면 꽤 예전부터 대세였잖아요? 

 

누군가는 정말 필요함을 느껴서 공부를 할 수도 있고,

누군가는 대세에 뒤쳐지기 싫다는 생각으로 공부할 수도 있고,

누군가는 면접에서 써먹기 위해 억지로 공부 할 수도 있고,

 

 공부의 이유야 어찌 됐건 그게 뭐가 중요합니까

안 하는 사람보단 100배 낫지

 

사실 저는 억지로 공부했던 것 같아요ㅎ;;

RxSwift가 대세래! 모르면 간첩이래!

하하하 이 글을 보는 당신은 간첩 하하하!

 

 농담이고 쨌든 최대한 이해하기 쉽게 풀어쓰려고 노력 해볼게요!

다만, 저도 아직 배워야 할 게 너무 많은 사람으로서

틀리거나 의아한 부분이 당연히 있을 수 있습니다(RxSwift에 한해서 더 그럴 수 있음)

따라서 잘못된 내용이나 피드백은 언제나 댓글 바랍니다 :)

그럼 이제 공부하러 가봅시다!

모든 포스팅은 편의 말투로 합니다~!!

 

+ 참고로 초안입니다! 부족하다 생각하여 계속 수정하고 수정될 포스팅입니당

처음 내용은 매우 부실할 수 있음

 

 

 

 

1. RxSwift를 어거지로라도 이해해봅시다

 

움.. 나는 뭐랄까...

RxSwift를 공부한다? -> RxSwift가 도대체 머하는 놈인데?를 먼저 알아야 하는데

처음 RxSwift를 검색했눈데.. 거의 대부분의 글에선 갑자기..

 

태초에 Observable, Subscribe가 있었다... 

 

그리고 갑자기 등장하는 operator 대잔치...;;

아니 그래서 RxSwift가 당장 뭔데요..? 싶었음..

 

그래서 내 포스팅에선 간단하게 서론부터 RxSwift가 뭔지부터 시작할 것임!

휴먼 소들체로 작성할테니 물흐르듯 읽어주시면 감사

 

여러분 RxSwift의 뜻이 뭐인 것 같음??

RxSwift의 약자는 바로바로

 

Reactive Extension + Swift

 

임!! 또한

RxSwift를 검색해보면, RxSwift Github에선

 

Reactive Programming in Swift

 

라고 나와 있음!

공통적으로 들어있는 ReactiveSwift라는 단어.. 호옹이..

자, Reactive라는 것은 "반응"과 관련된 단어잖음??

 

그럼 우린 저 설명만 보고 그냥

RxSwift는 뭐.. Swift에.. 반응 같은 것을.. 끼얹었나?

라고.. 생각.. 해보면 될듯..???

 

그래서.. 그.. 반응이란 것이 도대체.. 뭔데...?

여러분, 혹시 반응형 프로그래밍이라는 것에 대해 들어보지 않았음??

자, 우리는 지금까지 OO프로그래밍에 대해 익히 들은 것들이 있잖음??

예를 들면

 

객체지향 프로그래밍

함수형 프로그래밍

 

과 같이!!

반응형 프로그래밍이란 것은 사실 거대한 것이 아니라

그냥 어떤 프로그래밍에 있어 하나의 패러다임이라고 생각하면 됨!

 

그럼 우린 이렇게 생각해볼 수 있는 것임

 

RxSwift라는 것은

Swift를 반응형 프로그래밍 하는 것이겠구나!

 

웅!

그래서 반응형 프로그래밍이 도대체 먼데!

 

 

 

1-1. 반응형 프로그래밍

 

반응형 프로그래밍(Reactive Programming)이란,

데이터의 흐름 및 변경사항을 전파하는 데 중점을 둔 프로그래밍 패러다임입니다

이 패러다임을 사용할 경우, 주변환경/데이터에 변화가 생길 때 

연결된 실행 모델들이 이 이벤트를 받아 동작하도록 설계하는 방식입니다

 

.. ? 학생,, 글 내려,,^^

이게 먼 소린가 싶잖음??

 

"데이터의 흐름 및 변경사항"을 "전파" 하는 데 중점을 뒀다라..

만약 변경사항이 일어났을 경우, 연결된 "실행 모델"들이 이 "이벤트를 받는다"라..

ㅋ..

 

좀 더 쉽게 이해 해봅시다 XD

 

 

var a = 10
var b = 20
 
var sum = a + b
sum              // 30

 

 

자 위와 같은 코드는 우리가 일반적으로 작성하던 코드잖음??

위에서 sum이란 변수엔 당연히 30이 들어가 있음!!

 

자, 근데 다음과 같이 만약 a라는 변수의 값이 

어느 순간 단순 변심에 의해 갑자기 바꼈음

 

 

= 20
sum              // 30

 

 

위처럼 20으로 바뀌어 버린 것임..

근데 우리가 평소 하던 일반적인 프로그래밍일 경우,

sum의 타입은 Int 타입이고, 대입할 당시의 a의 값을 복사 했고,

우리는 sum에 a가 바꼈다고 어떠한 작업을 해주지 않았기 때문에,

sum이 a+b였긴 하지만, a의 값이 바뀌었다고 해서 sum의 값이 바뀌진 않음

 

자, 근데 반응형 프로그래밍에선 말이죠..

 

 

= 20
sum              // 40

 

 

ㅇㅖ..?? 싶겠지만, a값을 20으로 바꾸면,

a가 바뀐 이후 우리가 어떠한 작업을 추가적으로 해주지 않아도,

sum의 값이 바뀌어야 함..!

 

이게 어떠케 가능한 일이죠..? 싶잖음?

근데 앞서 반응형 프로그래밍이 뭐라고 했음?

데이터의 흐름 및 변경사항을 "전파" 하는 데 중점을 뒀다고!

만약 변경사항이 일어났을 경우, 연결된 "실행 모델"들이 이 이벤트를 받는다고!

 

지금 a라는 데이터의 흐름이 기존 10에서 20으로 변경됐을 때

이 변경사항에 대해서 a와 연결되어 있는 sum(실행 모델)이 이벤트를 "전파"받아서 

어떠한 동작(값 갱신)을 할 수 있는 것

이것이 바로 반응형 프로그래밍인 것임(ㅋ)!!!!

 

자, 그러면 이제 어떤 생각이 드나면

아 그럼 sum, 즉 실행 모델이란 놈은,

a의 값이 바뀌는지 안 바뀌는지에 대해서 "관찰"을 하고 있어야겠네요!!??

 

 

 

 

또한! 그러고 a의 값이 바뀌었을 때 관찰 중인 sum에게 이를 전파 해야 겠네요..?

그리고 해당 이벤트를 전파 받았을 때 어떤 일을 하지 sum에서 정하면 되겠네요..!!??

 

맞음!!! 이게 어떻게 가능 하냐구..?

이게 가능하게 해주는 것이 바로 !!!

우리가 앞으로 공부할 RxSwift의 Observable, Obsever, Operater임!!!

(물론 지금은 공부하지 않을 것이니 응 관심없ㅇ ㅓ하셈)

 

당장 위 예제는 a라는 단순한 Int 변수 값이라 이해가 안 갈 수 있는데,

만약 다음과 같이 프로그래밍을 하다보면 자주 사용되는 이벤트들을 생각해보셈

 

버튼이 눌렸을 때

키보드가 올라 왔을 때

언제 일어날지 모르는 어떤 이벤트가 발생 했을 때

 

위 이벤트들의 공통점이 뭐임?? 비동기적인 이벤트들이다!

언제 유저가 버튼을 누르고 키보드를 띄우고 할지 등등을 프로그래머인 우린 알 수 없잖음!!

다만,

 

유저의 "반응"이 비동기적으로 왔을 때,

즉 어떤 데이터의 흐름이 바뀌었을 때,

즉 처음 예제에서 a의 값이 언제 어디선가 변경 되었을 때

 

이 반응에 대해 관찰을 하는 놈이(sum) 있다면,

변화가 일어났을 때 이 관찰하던 놈은 이 변화에 대해 전파를 받을 수 있고,

따라서 변화에 대한 어떤 동작을 진행할 수 있는 거구나

 

가 사실 .. 바로.. . 반응형프로그래밍인 것...!!

이런 이벤트들로 생각을 했을 때 보통 어떤 생각이 드냐면..

음.. 이거 Swift의

 

Notification

Delegate Pattern

Closure

 

등등 으로도 충분히 구현할 수 있지 않나요?..ㅎㅎ 물논.. 당근.. ㅎㅎ

당연하잖음? 만약 반응형 프로그래밍 없이 못하는 거였다면

RxSwift는 대세가 아니라 필수가 되었을 거잖음

 

근데 충분히 Swift로도 가능하지만,

기존 프로그래밍 방법들로 했을 때의 발생할 수 있는 한계점

(쓰레드 넘나들기, 비동기 코드 처리로 인한 코드 뎁스 깊어지기 등)

을 해결해줄 수 있는 것이 Reactive Programming이자 즉 RxSwift임 ㅎ_ㅎ

이건 나중에 RxSwift를 썼을 때의 예시 코드를 보며 같이 이해 해볼 것임..!

 

+ 또한 Reactive Rrogramming에서의

선언적 프로그래밍 / 함수형 프로그래밍과 관련된 내용은

Rx를 조금 더 다룬 후에 하겠습니다!

 

 

아 뭐 그래~ 지금은 그냥~

반응형 프로그래밍이 대충 뭔지 알았어~

 

어떤 비동기 이벤트가 있을 때! 그것을 관찰하는 놈이 존재하고~

만약 이벤트가 발생한다면, 관찰하는 놈은 해당 이벤트(데이터 흐름 변경)에 대해 전파 받을 수 있고

따라서 그에 따른 어떤 작업을 할 수 있다는 거구나~

이는 Swift로도 충분히 가능하지만~ RxSwift를 쓰면 뭔가 좀 더 좋은가보구나~

 

정도만 알 것임!!

그리고 그것이 어떻게 가능하게 해주는지

앞으로 RxSwiftObservableObserver, 다양한 Operator 들을 통해 배우면 되는구나 ~.~

 

 

 

1-2. RxSwift 정의 다시 봐보기

 

RxSwift는 비동기 프로그래밍을

관찰 가능순차적 형태함수 형태의 연산자를 통해  처리하게끔 도와줍니다

 

위 내용을 다 보고 왔다면,

아하 RxSwift는 반응형 프로그래밍이기 때문에

어떤 비동기 이벤트에 대해 관찰 가능한 형태로 만들고

함수 형태의 연산자를 통해 이 비동기 이벤트의 변화에 따른 전파를 받을 수 있고

또한 여러 연산을 처리할 수 있게 한는 거구나

라고 정도만 이해하면 될 것 같음 ㅎ_ㅎ..

 

 

왜냐?? 실제로 예제를 보다 보면

위 이론이 그냥 말로 해서 어렵구나~~ 이런 내용이었구나~를 이해할 수 있기 때문에!!

 

다음편에선 그럼 도대체

비동기 이벤트를 어떻게 관찰 가능한 형태로 만든단 건데!

그리고 어떻게 이 이벤트에 대한 변화를 전파 받는건데!

를 알아보도록 하겠습니다 :)

 

 

참고로 제가 쓰면서도 엥.. 음 .. 어..? 싶은 부분이 있어서

계속 수정해나갈 예정이니,

지금 완전한 초고을 읽으셨다면 유감

잘못된 부분이 있다면 언제든 피드백 주세요!!!

 

 

 

 

출처 : 

https://admd13.tistory.com/211

https://velog.io/@myoungsubsim/%EB%B0%98%EC%9D%91%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 

 

 



Calendar
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
최근 댓글
Visits
Today
Yesterday