Lifecycle

๊ฐœ๋…

  • ํ™”๋ฉด์˜ ์‹ค์งˆ์ ์ธ ์ง„์ž…์ (EntryPoint)์ž…๋‹ˆ๋‹ค.

  • MVP์—์„œ์˜ Presenter ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

  • ํ™”๋ฉด ๋‹จ์œ„๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • ํ™”๋ฉด์˜ ์ˆ˜๋ช…๊ณผ ์—ฐ๊ฒฐ๋˜๋Š” ๊ฐœ๋…์ด๋ผ๋Š” ์˜๋ฏธ์—์„œ Lifecycle์ด๋ผ ๋ช…๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  • ํ•œ ํ™”๋ฉด์— ํ•˜๋‚˜๋งŒ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ์™ธ ์—†์Œ)

๊ตฌํ˜„ ์ •์ฑ…

  • ์ƒ์„ฑ์ž๋Š” LifetimeScope์—์„œ ๊ฐ€์ ธ์˜จ ๊ฐ ํด๋ž˜์Šค์˜ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์—ญํ• ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. (๋‹ค๋ฅธ ๋ณต์žกํ•œ ์ฒ˜๋ฆฌ๋Š” ํ•˜์ง€ ์•Š๋Š”๋‹ค)

  • ํ™”๋ฉด ์ „ํ™˜ ์ „์— WillPushEnterAsync ์•ˆ์—์„œ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    • Model ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    • View ์ดˆ๊ธฐํ™”(์ƒ์„ฑํ•œ ๋ชจ๋ธ์„ View์— ์ „๋‹ฌ)ํ•ฉ๋‹ˆ๋‹ค.

  • ํ™”๋ฉด ์ „ํ™˜ ํ›„ DidPushEnter ์•ˆ์—์„œ View ๋ฒ„ํŠผ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌ๋…ํ•ฉ๋‹ˆ๋‹ค.

    • ํ™”๋ฉด ์ „ํ™˜ ํ›„ ๋ฒ„ํŠผ ์ฒ˜๋ฆฌ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ์ „ํ™˜ ์ค‘์—๋Š” ๋ฒ„ํŠผ ์ž…๋ ฅ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (์ „ํ™˜์ค‘์— ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฌ๋ฉด ์—ฌ๋Ÿฌ๊ฐ€์ง€๋กœ ๊ณค๋ž€ํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„์ง‘๋‹ˆ๋‹ค.)

  • ํด๋ž˜์Šค์˜ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์— AssetName(ํ”„๋ฆฌํŽฉ ์ด๋ฆ„)์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ ์ฝ”๋“œ

[AssetName("TestPage")]
public class TestPageLifecycle : LifecyclePageBase
{
    // ์ƒ์„ฑ์ž์—์„œ ๋ฐ›๋Š” ๊ฒƒ์„ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.
    private readonly TestPageView _view;
    private readonly PageEventPublisher _publisher;
    private readonly ModalManager _modalManager;

    // ์ƒ์„ฑ์ž ์ธ์ ์…˜
    [Inject]
    public TestPageLifecycle(TestPageView view, PageEventPublisher publisher, ModalManager modalManager) : base(view)
    {
        _view = view;
        _publisher = publisher;
        _modalManager = modalManager;
    }

    // ํ™”๋ฉด ์ „ํ™˜ ์ „ ํƒ€์ด๋ฐ์— View ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ
    protected override UniTask WillPushEnterAsync(CancellationToken cancellationToken)
    {
        var testModel = new TestPageModel();
        _view.SetView(testModel);
        return UniTask.CompletedTask;
    }

    // ํ™”๋ฉด ์ „ํ™˜ ํ›„ ๋ฒ„ํŠผ ์ด๋ฒคํŠธ ๋“ฑ๋กํ•˜๊ธฐ
    public override void DidPushEnter()
    {
        base.DidPushEnter();
        // ํŽ˜์ด์ง€ ํ‘œ์‹œ
        _view.OnClickPage.Subscribe(_ => {
          _publisher.SendPushEvent(new NextPageBuilder());
        });
        // Modal ํ‘œ์‹œ
        _view.OnClickModal.Subscribe(_ => {
          _modalManager.Push(new NextModalBuilder()).Forget();
        });
    }
}

Last updated