https://www.charlezz.com/?p=29013
์ ๋ธ๋ก๊ทธ์ ์ํ ์ ์ฅ๊ณผ ๋ณต๊ตฌ ์์ ์ฝ๋๋ฅผ ์ ํ์ฉํ๋ค. ์ฐฐ์ค๋ ๊ฐ์ฌํฉ๋๋ค๐
์ปค์คํ ๋ทฐ๋ก ๋ฌ๋ ฅ์ ๋ง๋ค์๋ค. ๋์์ธ ๊ฐ์ด๋๋ฅผ ์ ์ฉํ๊ณ ์ฑ ์ฑ๋ฅ์ ์ํด์๋ ์ปค์คํ ๋ทฐ๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ ํฉํ๋ค๋ ๊ฒ์ ์ธ์ ํ ์ ๋ฐ์ ์์๋ค.
๋ฌ๋ ฅ์์ ์ด๊ธฐํ๋ก ์ ํ๋๊ฑฐ๋(์ค๋ ๋ ์ง๊ฐ ์ ํ๋จ), ์ฌ์ฉ์๊ฐ ์ ํํ ๋ ์ง๋ ๊ฐ์กฐ๋์ด ํ์๋๋ (๋น์ฐํ) UI์ด๋ค.
์ปค์คํ ๋ทฐ ๋ฌ๋ ฅ์ด ๋ ธ์ถ๋๋ ํ๋ฉด์์ ๋ค์ depth ํ๋ฉด์ผ๋ก ์ง์ ํ๋ ์๋๋ฆฌ์ค๋ค์ด ์๋๋ฐ, Jetpack Navigation์ ์ด์ฉํด Fragment๋ค๋ก ํ๋ฉด์ ์ด๋ํ๊ธฐ๋ก ํ๋ค. ์ด ๋ฌ๋ ฅ์ด ์๋ ํ๋ฉด์ด ์๋น์ค์ ๋ฉ์ธ ํ๋ฉด์ด๊ณ , ์ด ์๋น์ค๋ฅผ Activity ํ๋์์ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ ํฉํ ๊ฒ์ด๋ผ๊ณ ํ๋จํ๋ค. (๊ทธ๋์ผ ํ๋๋ฐ๐ค depth๋ค์ Activity๋ก ํธ์ถํ๋ ๋ฐฉ๋ฒ๊ณผ Navigation์ ๋๊ณ ์ ๋ง ๋ง์ด ๊ณ ๋ฏผํ๋ค.)
๋ฌธ์ ๋ ์ปค์คํ ๋ทฐ๊ฐ ์๋ Fragment(A ๋ผ ๋ถ๋ฅด๊ฒ ๋ค.)์์ ๋ค๋ฅธ Fragment ํ๋ฉด(B๋ผ ๋ถ๋ฅด๊ฒ ๋ค.)์ผ๋ก ๊ฐ๋ค๊ฐ ๋์์ค๋ฉด ์ปค์คํ ๋ทฐ์ ์ํ๊ฐ ์ด๊ธฐํ๋๋ค๋ ๊ฒ์ด์๋ค.
A์์ B๋ก ํ๋ฉด์ด ๋ ธ์ถ๋๋ฉด A์ ๋ทฐ๋ destroyed ๋๋ค. B์์ A๋ก ๋์์ค๋ฉด A์ ๋ทฐ๋ ๋ค์ created ๋์ด ์ปค์คํ ๋ทฐ๋ ๋ค์ ์ด๊ธฐํ๋์ด ๊ทธ๋ ค์ก๋ค.
์ฌ๊ธฐ์ ๋ ๊ณ ๋ฏผ.
- B ํ๋ฉด์ผ๋ก ๋์ด๊ฐ๊ธฐ ์ ์ A์ ์บ๋ฆฐ๋๋ทฐ์ ์ ํ๋ ๋ ์ง ์ํ๊ฐ์ ์ ์ฅํ๋ ๊ฒ์ ๋๊ตฌ์ ์ญํ ์ธ ๊ฒ์ธ๊ฐ.
A์ ํ ์์ผ๋ก ๋์ํ๋ ViewModel์ด ์งํํด์ผ ํ๋ ๊ฒ์ธ๊ฐ, ์ด ์บ๋ฆฐ๋๋ทฐ๊ฐ ํด์ผํ๋ ๊ฒ์ธ๊ฐ.
1) ์ฒ์ ์ ํ. ์บ๋ฆฐ๋๋ทฐ๊ฐ ๋ ์ง ๊ด๋ฆฌ์ ์ฑ ์์ด ์๋ค๊ณ ์๊ฐํด ์ปค์คํ ๋ทฐ์ ์ํ ์ ์ฅ์ ์๋ํ๋ค.
์บ๋ฆฐ๋๋ทฐ(๋ถ๋ชจ๋ทฐ) ์๋ ๋ ์ง ์ผ๋ณ ๋ทฐ(์์ ๋ทฐ)์ ์ผ์ผ์ด id๋ฅผ ๋ถ์ฌ์ฃผ๊ณ ...(6 x 7๊ฐ์ ๋ ์ง ๋ทฐ์ ๊ฐ๊ธฐ ๋ค๋ฅธ id๋ฅผ ๋ถ์ฌ์ค์ผ ํ๋ค๋ ๊ฒ์ ์ฒ์ ๊นจ๋ฌ์์ ๋ ์ ๋ง ํผ๊ณคํ๋ค.)
BaseSavedState๋ฅผ ์์๋ฐ์ ์ด ์ปค์คํ ๋ทฐ์ ๋ง๊ฒ State ํด๋์ค๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ
onSaveInstanceState()์ onRestoreInstanceState()๋ฅผ ์ค๋ฒ๋ผ์ด๋ํด์ ์! ์ ๋ง ์ ๋์ํ๋ค. ์ฑ๊ณต.
(๋ทฐ์ ์๋ช ์ฃผ๊ธฐ๋ ์ฐฐ์ค๋์ ๋ธ๋ก๊ทธ์์ ํ์ธํ๊ธฐ๋ก.)
2) ๋ฌธ์ ๋ฐ์
โ A(get api ํธ์ถ. ์๋ณ ๋ฐ์ดํฐ ์กฐํ ๋ฐ ๋ ธ์ถ + ์ฌ์ฉ์๊ฐ ๋ ์ง ์ ํ.)-> โกB(์ผ๋ณ post api ํธ์ถ) -> โข A๋ก ๋ค์ ๋์์์ data ๊ฐฑ์ (get api ํธ์ถ) ํ๊ฒ๋๋ฉด์, ํ์ด๋ฐ ์ด์๊ฐ ๋ฐ์ํ๋ค.
โข์์ data ๊ฐฑ์ ์ผ๋ก ์ธํ ๋ทฐ ๊ฐฑ์ ๊ณผ ์ปค์คํ ๋ทฐ์ ์ํ ๋ณต๊ตฌ ํ์ด๋ฐ์ด ์์ฌ์, ์บ๋ฆฐ๋๋ทฐ๋ โ ์์์ ๋ ์ง๊ฐ ์ ํ๋์ด ์ ๋ํ๋๋ ํด๋น ๋ ์ง์ ์ ๋ณด๊ฐ ์ ๋๋ก ๋ ธ์ถ๋์ง ์์๋ค.
3) ๊ฒฐ๊ตญ์ A์ ์ ํ๋ ๋ ์ง ๊ด๋ฆฌ๋ ViewModel๋ง ํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค.
์ปค์คํ ์บ๋ฆฐ๋ ๋ทฐ์ ์ด๊ธฐํ ์, ViewModel์์ ์ ํํ ๋ ์ง๋ฅผ ๋ฐ์ ์บ๋ฆฐ๋์ ํ์ํ๊ธฐ๋ก ํ๊ณ , ์ปค์คํ ๋ทฐ์ ์ํ ์ ์ฅ/๋ณต๊ตฌ ์ฝ๋๋ ๋ค ์ฃผ์์ฒ๋ฆฌ๐
์ต์๋จ ํ๋ฉด์ด A์์ B๋ก ๋์ด๊ฐ๋ฉฐ A์ ๋ทฐ๋ destroyed ๋๊ณ , B์์ A๋ก ๋์์ A๊ฐ ๋ค์ ๋ทฐ๋ฅผ ๊ทธ๋ฆด ๋, ViewModel์์ ์ ์ฅ๋ ๋ ์ง๋ฅผ ๊ฐ์ ธ๋ค๊ฐ ์ปค์คํ ๋ทฐ๋ฅผ ๊ทธ๋ ค์ฃผ๋, ์ํ๋ ๋๋ก ์ ์๋์ํ๋ค.
์ด ๊ณผ์ ๋ด๋ด ๋๋ ๊ฒ์, lifecycle์ ์๋ ๊ฒ์ด ์ ๋ง ์ค์ํ๋ค๋ ๊ฒ์ด๋ค.