[Unity] UniRX - 1 '비동기적 데이터 흐름' 처리 프로그래밍 라이브러리 개념
by Sugar0810- 제작자 : @neuecc (Yoshifumi Kawai, CTO at Grani, Microsoft C# MVP)
- License : MIT
- 다운로드 : AssetStore, GitHub
UniRx - Reactive Extensions for Unity
Functional Reactive Programming(FRP)를 C#에 사용할 수 있게 만든 .Net Reactive Extensions를 일본인 @neuecc가 Unity 전용으로 최적화하여 공개한 라이브러리
그런 만큼 더 가벼우며 UGUI, GameObject, Coroutine 등 유니티의 시스템과 매우 강력하고 직관적으로 연동이 되어 있어 쉽게 Reactive Programming 의 사용이 가능
일련의 흐름을 관찰할 수 있는 (Observable) 형태로 만들어서 값의 변화, 혹은 이벤트의 발생을 감지하는 것으로 이 값들은 마치 물이 흐르듯 스트림 (Stream) 을 통해 흐르는 것
경우에 따라 이 스트림의 값들을 필터링 하거나 버퍼링, 또는 다른 스트림의 값으로 바꾸는 등의 다양한 연산 가능
이렇게 스트림을 조작해서 원하는 결과가 통지 (Subscribe) 되므로 이때 최종적으로 필요한 처리를 해줄 수 있게 된다.
Rx 프로그래밍은 Async Event(비동기 이벤트) 와 Observer 디자인패턴의 통지 처리를 이용해 미리 이런 조건이 발생하면 이런 처리를 하라고 지시를 내려놓고 그 지시가 통과된 시점에서만 통지를 받는 형태가 된다.
개념적으로는 기존의 프로그래밍 패러다임과 워낙 다르다보니 바로 와닿지 않는 점이 있지만 연습을 거쳐 개념을 이해하게 되면 매우 편리하다는 점을 알게 될 것이다.
- 단, 사용 방법이 LINQ 쿼리 방식 중심이기에 람다 구문과 LINQ를 어느 정도 익숙하게 사용할 수 있어야 한다.
UniRx를 사용하면 시간 (및 타이밍)의 관리가 매우 편리해지며 코드의 가독성과 코드 라인 수를 획기적으로 개선할 수 있다.
Rx의 핵심 작동원리
1. 스트림(Stream)을 정의한다
2. 오퍼레이터(Operator) 로 스트림의 데이터를 가공한다
3. 가공된 데이터를 통지 (Subscribe) 받아서 우리의 로직에 태운다.
즉, 이벤트를 받으면 이걸 어떻게 가공하고 사용할지를 작성하는게 아니라 이벤트를 받기 전에 어떤 이벤트만 받고 싶은지를 작성하는 것
UniRx를 사용하기 좋은 예시
- 더블 클릭 판정이나 유저의 입력 시간 제한 등의 일정 시간 동안 대기 및 체크해야 하는 이벤트
- 파일을 다운로드하거나 특정 통신 요청 후 응답 처리하는 경우
- UI 반응이나 로직 상에 특정 변수 값이 변경되는 순간의 처리
등의 경우 예전에는 멤버 변수를 둔다거나 매프레임 Update 함수 내에서 변화를 체크하는 식의 작업을 해야 했지만 UniRx를 사용하면 매우 간단하게 제어할 수 있게 된다.
예시를 더 알아보고 싶다면 아래의 참고 사이트를 참조할 것
📚 참고 사이트
'⚙️ Programming > C# & Unity' 카테고리의 다른 글
[Unity] UniRX - 3 IObserver 메세지 종류 (0) | 2023.01.16 |
---|---|
[Unity] UniRX - 2 Subject, Observable 사용법 (0) | 2023.01.16 |
[Unity] DoTween과 코루틴을 이용한 스플래시 오프닝 (0) | 2023.01.16 |
[Unity] Mathf.Sin()곡선을 이용해 간단한 물결 애니메이션 구현하기 (0) | 2023.01.15 |
[Unity] LifeCycle(유니티 생명주기) (0) | 2023.01.15 |
블로그의 정보
Sugar
Sugar0810