본문 바로가기
Unity/UniRx & UniTask

UniRx의 작동 원리 (1) - Observable

by Pretty Garbage 2022. 11. 7.

UniRx의 기본 요소로 아래 3가지로 분류 가능합니다.

  • Observable
  • Operator
  • Scheduler

 

우선 이 세가지에 대해서 설명해보려고 합니다.

 

Observable이란?

 

1. 이벤트 기반 프로그래밍

 

UniRx는 Reactive Programming이라는 함수형 프로그래밍이 되는 프로그래밍 스타일을 가능하게 하는

라이브러리입니다. 

 

간단하게 함수형 프로그래밍이 무엇인가? 앱의 실행 중 발생한 이벤트를 이벤트 메시지로 통지합니다. 이 이벤트 메시지를

다른 곳에서 구독하고 메시지를 받은 타이밍에서 처리합니다. 이러한 이벤트의 발생 장소와 그 핸들링 장소가 결합되어 있는

스타일의 프로그래밍을 함수형 프로그래밍이라고 합니다. 혹은 이벤트 반응형 프로그래밍!

 

이 이벤트 구동 프로그래밍은 게임 개발에도 편리하게 이용할 수 있습니다.

 

  • 게임 패드로부터 키 입력될 떄 처리를 실행하는 단계
  • 플레이어가 적에게 데미지를 받아서 처리 프로세스 실행하는 단계
  • 게임의 남은 시간이 0이 되면 게임을 종료하는 단계

기타 등등...

 

 

2. 옵저버 패턴

 

이벤트를 구현하는 데에 있어 몇 가지 방법이 있으며, 그 중 하나는 옵저버 패턴 입니다.

옵저버 패턴은 GoF 디자인 패턴 중 하나이며 이벤트 알림을 구현하는 데에 사용되는 패턴입니다.

옵저버의 이름대로 관찰자와 관찰 대상 두개체가 있습니다.

UniRx는 이 옵저버 패턴을 기초로 만들어집니다. 

 

한가지 주제에 대하여 옵저버들이 관찰하고 소식을 듣는다.

단 위와 같이 한 주제에 대해서 알림이 뜨면 여러 관찰자 대상에게 구독의 형식으로 이벤트를 발생 시킬 수 있습니다.

 

메시지를 수신할 수 있게 되는 IObserver<T> 인터페이스는 다음과 같이 구성되어있습니다.

 

public interface IObserver<in T>
{
    void OnNext(T value);
    void OnError(Exception error);
    void OnCompleted();
}

public interface IObservable<out T>
{
	IDisposable Subscribe(IObserver<T> observer);
}

이 인터페이스 3개의 메소드가 정의되어 있습니다. 각각 다음과 같은 용도로 사용되어집니다.

 

메서드 이름 기능
OnNext 이벤트 메시지 본문 수신
OnError 오류 메시지 수신
OnComplete 이벤트 모든 메시지 발행 완료 통지 종료를 뜻한다.

메인이 되는 이벤트 메시지는 OnNext로 메시지를 받는다. 예외가 도중에 발생이 되면 OnError 이벤트 통지 종료는 OnComplete()에 통지된다.

 

IObserver를 받는 객체는 관찰 대상(Subject)가 통지하는 형태이고 이 주제에 대해서 관찰하는 친구들은 IObservable을 상속받아 구현하게 되는데 여기서 통지를 받는 친구들은 단 하나의 메서드 Subscribe()만  가집니다. 

반환 값이 IDisposable 이므로 Dispose() 메서드를 호출하여 옵저버를 해지할 수 있어야 합니다.