riverpod ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ํ์ตํ์ง ๋ฒ์จ ์ฝ 2์ฃผ๊ฐ ํ๋ ๋ค.
๊ฐ์ธ ๊ณผ์ ์์ ์ , provider๋ฅผ ์ ํ ๋ค ๋น์ทํ๋ค๊ณ ์๊ฐํด ๊ธ๋ฐฉ ์ ์ํ ์ ์์ ์ค ์์๋ค.
Provider์์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ์ํ๋ฅผ ํ๋๋ฐ์ ๊ด๋ฆฌ ํ ์ ์๊ธฐ์ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ด ํ์ํ๋ค.
๋ ๋ค๋ฅธ ์ฐจ์ด์ ์ผ๋ก๋ Provider๋ผ๋ฆฌ ref๋ฅผ ํตํด ์ฐธ์กฐํ ์ ์๋ค.
๋ฐ๋ผ์, ์ฃผ์ logic์ ์์ฃผ๋ก viewmodel์ ๋ถ๋ฅํ๊ณ ํด๋น logic๋ผ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
์ฃผ์ํ ์ ์ผ๋ก๋ provider์ ์๋ช
์ฃผ๊ธฐ๋ ์ฐธ์กฐ ์นด์ดํ
๋ฉ์ปค๋์ฆ์ ์ํด ๊ฒฐ์ ๋๋ค.
Generator๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, autoDispose ๊ธฐ๋ฅ์ผ๋ก ์๋ช
์ฃผ๊ธฐ๋ฅผ ์์์ ๊ด๋ฆฌํด์ฃผ์ง๋ง, ๋ ๊ฑฐ์ ๋ฐฉ์์ ์ ํํ๋ค๋ฉด ์ํ์ ์ด๊ธฐํ๊ฐ ์ธ์ ๋๋์ง ์ ์ดํด๋ณผ ํ์๊ฐ ์๋ค.
Provider๋ ์ ์ธ๋์๋ค๊ณ ํด์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ๋ก ์ฌ๋ผ๊ฐ์ง ์๋๋ค.
๋จ์ class ์ ์์ด๊ธฐ ๋๋ฌธ์ UI์์ wacth๋ฅผ ํธ์ถํ๊ฑฐ๋ ํด๋น Provider๋ฅผ ์ฒ์ ์ฐธ์กฐํ๊ธฐ ์์ํ ๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฌ๋ผ๊ฐ๊ฒ ๋๋ค.
์ดํ, Provider๋ ์์ ์๊ฒ ๋นจ๋ ๊ฝ์, ์ฆ ์์ ์ ์ฐธ์กฐ ์ค์ธ ๋ฆฌ์ค๋์ ์๋ฅผ ๊ธฐ์ตํ๋ค.
watch๋ฅผ ํตํด ๊ตฌ๋
์ค์ด๊ฑฐ๋ ์ฐธ์กฐ์ค์ธ Provider๊ฐ ์๋ค๋ฉด ์๋ช
์ ์ ์ง๋๋ค.
Provider๋ฅผ watchํ๋ ๋ง์ง๋ง ์์ ฏ์ด dispose ๋ ๋, ๊ฐ์ด dispose ๋๋ค.
์ฐธ๊ณ ๋ก read๋ ์๋ช
์ฃผ๊ธฐ์๋ ๊ด๊ณ์์ด ํ๊ดด๋ ์ ์๋ค.
๋ค์ ๋ค๋ฅธ ๊ณณ์์ ์ฐธ์กฐ๋๋ฉด ์ด๊ธฐํ๋ถํฐ ๋ค์ ์์๋๋ค.
๋ด๊ฐ ์ ๋ ๊ฑด ๋จ์ง class๋ค์ธ๋ฐ ์ด๋ป๊ฒ ๋๋ฐ์ด์ค์ ํ๋ฉด์ ๋ํ๋ ์ ์์๊น?
๊ถ๊ธ์ฆ์ ํด๊ฒฐํ๊ธฐ ์ํด ํํฐ๋์ ์ฐพ์๊ฐ๋ค.
๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด, Widget Tree, Elemenet Tree, RenderObject Tree๋ ๊ฐ๋ฐ์์ ์์์๋ถํฐ ๋จ๊ณ๋ณ๋ก ๊ฑฐ์ณ๊ฐ๋ค.
Widget๋ ์ค๊ณ ๋จ๊ณ์ด๋ค.
์ฝ๋๋ฅผ ์
๋ ฅํ๋ฉด Widget์ Tree์ ๋ถ๋ชจ ์์ ๊ด๊ณ๋ก ์ฐ๊ฒฐ๋๋ค.
์ต์์ MaterialApp๋ถํฐ ๊ฐ Page๊ฐ ์์นํ๊ฒ ๋๋ฉฐ, ์ฌ๊ธฐ์ Widget์ ๋ค์ ํ๋ฉด์ ๊ทธ๋ฆด ์ ์๋ ์์ ฏ๊ณผ ์๋ ์์ ฏ์ผ๋ก ๋๋๋ค.
Element๋ ์ค๊ณ๋์ ๋ฌด์์ ๋ผ์๋ฃ์์ง ๊ณ ๋ฏผํ๋ ๋จ๊ณ์ด๋ค.
Widget์ ๋ํ ์ค์ง์ ์ธ ์ ๋ณด(BuildContext)๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๋ง์ฝ Widget Tree์์ Key ๊ฐ๊ณผ RuntimeType์ด ๋ค๋ฅธ Widget์ด ๋ฐ๊ฒฌ๋๋ฉด rebuild๋ฅผ ์คํํ๊ณ Element๋ฅผ ์์ ํ๋ค.
์ถ๊ฐ์ ์ผ๋ก, RenderObject Element๋ Render Tree๋ก ๋๊ธด๋ค.
Render Tree์์๋ Element Tree์์ ๋๊ฒจ๋ฐ์ Object๋ฅผ ๋ฐํ์ผ๋ก ์์ฒด ๊ทธ๋ํฝ ์์ง์ ์ด์ฉํด ํ๋ฉด์ ์ผ๋ถ ์์ฑํ ๋ค, ๊ทธ๋ฆฌ์ง ๋ชปํ ๋ถ๋ถ์ ์ ๋ณด์ ํจ๊ป iOS์ Android์๊ฒ ๋๊ธด๋ค.