View
๊ฐ๋
MVP ์ V์ ํด๋นํ๋ View.
ํ ํ๋ฉด์ ํ๋๋ง ์์ฑํฉ๋๋ค. (์์ธ ์์)
๊ตฌํ ์ ์ฑ
ScreenSystem์ PageViewBase, ModalViewBase ๋ฅผ ์์๋ฐ์ ๊ตฌํ.
Lifecycle์์ Model์ ๋ฐ์ ํ๋ฉด์ ๊ตฌ์ถํ๋ค.
๊ฐ ๋ฒํผ ๋ฑ์ UI ์์๋ SerializeField๋ก ์ฐธ์กฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
๊ฐ ๋ฒํผ์ ์ด๋ฒคํธ๋ IObservable๋ก ๊ณต๊ฐํ๋ค.
๋ชฉ๋ก ๋ฑ ๋์ ์ผ๋ก ๋์ด๋๋ View์ ๋ถ๋ถ์ ์ด View ๋ด์์ ์์ฑํ๋ค.
์ฆ, View๊ฐ View๋ฅผ ๊ฐ์ง๋ ๊ตฌ์กฐ
์ด๋ฒคํธ๋ ๋ธ๋ฆฟ์ง์ฒ๋ผ ๋์ด๋ฒ๋ฆฌ์ง๋ง, ์ด๋ฒคํธ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ๊ธฐ ๋๋ฌธ์ ํ์ฉ.
๋ค๋ง, View์ ์ญํ ์ ๋ค์ ๋ ๊ฐ์ง ์ญํ ๋ก ํ์ ํจ์ผ๋ก์ ๊ฐ ์ฒ๋ฆฌ ๊ฐ์ ๋ณต์ก์ฑ์ ํผํ ์ ์๋ค.
Model์ ๋ฐ์์ ํ๋ฉด UI๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ
์ด๋ฒคํธ๋ฅผ ๋ฐ๋์ํค๋ ๊ฒ
UI์ ๋๋ฉ์ด์ ์ Animator๋ Timeline ๋ฑ์ ๋น์คํฌ๋ฆฝํธ ๋ฐ์ดํฐ์ ์์งํจ์ผ๋ก์ ์คํฌ๋ฆฝํธ ์์ฑ๋์ ์ค์ธ๋ค.
์ ๋๋ฉ์ด์ ์ด ๋๋ ๋๊น์ง UniTask๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ค๋ฆฐ๋ค.
1ํ๋ฉด 1View๊ฐ ์์น
์์ ์ด์ ๋ค๋ก View๋ ๋น๋ํด์ ธ๋ ํฐ ๋ฌธ์ ๊ฐ ๋์ง ์๊ธฐ ๋๋ฌธ.
ํ๋ก์ ํธ์ ๋ฐ๋ผ์๋ Model์ ์ง์ View์ ์ ๋ฌํ์ง ์๊ณ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ ๋ฌํ ์๋ ์๋ค. (์๋์ ๊ฒฝ์ฐ์ ์ธํฐํ์ด์คํ ํจ์ ์ถ์ฒ)
View๋ Model์ด ์ฌ๋ฌ ํ๋ฉด์์ ์ฌ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ
์์ ์ฝ๋
public class TestPageView : PageViewBase
{
[SerializeField] private TextMeshProUGUI _messageText;
[SerializeField] private Button _nextPageButton;
[SerializeField] private Button _nextModalButton;
// ๋ฒํผ์ ํด๋ฆญ ์ด๋ฒคํธ๋ง ๊ณต๊ฐํ๋ค
public IObservable<Unit> OnClickPage => _nextPageButton.OnClickAsObservable();
public IObservable<Unit> OnClickModal => _nextModalButton.OnClickAsObservable();
// Model์ ๋ฐ์ ํ๋ฉด ๊ตฌ์ฑํ๊ธฐ
public void SetView(TestPageModel model)
{
_messageText.SetText(model.TestMessage);
}
}
๋ฒํผ์ ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ UniRx๊ฐ ์๋ UniTask์ IUniTaskAyncEnumerable๊ณผ ForEachAwaitAsync๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ ์๋ ์์.
UniTask๋ก ๊ตฌํํ ๊ฒฝ์ฐ ๋ฒํผ์ด ๋๋ ธ์ ๋ ํต์ ์ฒ๋ฆฌ ๋ฑ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋ ๋ ๊น์ง ๋ค์ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์๋ ๋ฑ ๋ธ๋กํน์ ์คํ๋ ์ฒ๋ฆฌ๋ฅผ ์ฝ๊ฒ ๊ตฌํ ๊ฐ๋ฅ.
UniTask๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ UniTask Tracker๋ก ๋๋ฒ๊น ์ด ๋ ์ฌ์์ง๊ธฐ๋ ํจ.
UniRx/UniTask ์ค ์ด๋ ๊ฒ์ ์ฌ์ฉํ ๊ฒ์ธ๊ฐ๋ ๊ฐ๋ฐ์์ ๊ธฐ์ ์ด๋ ์ง์์ ๋ฐ๋ผ ํฌ๊ฒ ๋ฌ๋ผ์ง. (ํธํ ์ชฝ์ ์ ํํ๋ฉด ๋๋ค.)
์ฐธ๊ณ : UniTask๋ฅผ ์ด์ฉํ ๋ฒํผ ์ฒ๋ฆฌ ์ํ
// View
public IUniTaskAsyncEnumerable<AsyncUnit> OnClickAsync => _button.OnClickAsAsyncEnumerable();
// Presenter
_view.OnClickAsync.ForEachAwaitAsync(async _ =>
{
// ๋น๋๊ธฐ ์ฒ๋ฆฌ, ํนํ ํต์ ์ฒ๋ฆฌ ๋ฐ ํ๋ฉด ์ ํ ์ฒ๋ฆฌ
// await ~~
// ํจ์ ๋ด ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋ ๋๊น์ง ๋ค์ ์ฒ๋ฆฌ๊ฐ ์คํ๋์ง ์๋๋ค.
});
Last updated