본문 바로가기
Unity/UniRx & UniTask

Observable 사용 방법 <ReactiveProperty>

by Pretty Garbage 2023. 2. 12.

 Reactive Property

 

사실 이 기능만 알아도 굉장히 편하게 사용할 수 있다고 생각합니다.

리액티브 프로퍼티는 값을 읽고 쓸 수 있으며 값이 변경 될 때 메시지를 발행하는 객체입니다.

 

사용방법

 

기본적으로 ReactiveProperty<T> 의 형태를 취합니다.

 

ReactiveProperty<int> test = new ReactiveProperty<int>();
test.Subscribe(x => Debug.Log(x));

ReactiveProperty는 IDisposable을 상속받고 있기 때문에 선언된 변수에 노출만 시켜주면 

구독처리가 가능합니다.

이후 test의 value가 변화할 때마다 통지가 진행됩니다.

 

사용방법도 매우 쉽고 편리합니다.

 

Tip

기본적인 자료형을 담고 있는 Reactive property들이 존재하는데

ReactiveProperty<int> test = new ReactiveProperty<int>();
IntReactiveProperty test2 = new IntReactiveProperty();

예를 들자면 <T>에 int를 넣은 것과 IntReatveProperty는 스크립트 상에서 같은 동작을 하지만

Unity Inspector상에서의 차이를 보입니다.

둘 다 public 접근제한자를 걸고 Inspector상에서 비교를 해보면

 

RxProperty 차이

test는 하위항목에 Value가 test2는 일반 public int처럼 직렬화가 된 것을 볼 수 있습니다.

 

ReadOnlyReactiveProperty<T> / IReadOnlyReactiveProperty<T>

 

위 항목은 변수에 대한 접근 지정을해주고 싶을 때 사용합니다.

 

가령 일반적인 Property를 사용할 때

 

위와 같이 변수의 수정을 막기 위해 외부에서는 수정이 불가능하게 막고 클래스 내부에서만 수정할 수 있도록 하기 위해 같은 방법으로 많이 사용되고는 하는데 ReadOnlyReactiveProperty도 마찬가지의 상황을 지원하기 위함입니다.

 

 

간단한 타이머 예제입니다. 위와 같은 컴포넌트를 만들어 놓으면 외부에서는 CurrentTime에 의해 타이머에 대한 값을 수정할 수는 없고 값을 읽기만 할수 있는 형태로 제공할 수 있습니다.