๐๏ธKEY POINT๐๏ธ ๊ฐ ๋ฉ์๋๊ฐ ์ด๋ป๊ฒ ํธ์ถ๋๋์ง, ์ด๋ค ์ญํ ์ ํ๋์ง ์ดํดํ๊ธฐ.
fragmentManager๊ฐ fragment๊ฐ ์ด๋ค ์ํ์ฌ์ผํ๋์ง ํ์ธ ํ ๊ทธ์ํ๋ก ์ ํํ๋ ์ผ์ ๋ด๋นํ๊ณ
fragment ์๋ช
์ฃผ๊ธฐ๋ฅผ ๋ฒ์ด๋๋ฉด FragmentManager๋ activity์ ์ฐ๊ฒฐํ๊ณ ๋ถ๋ฆฌํ๋ ์์
๋ํ๋ค.
fragment ํด๋์ค์๋ ๋๊ฐ์ง ์ฝ๋ฐฑ ๋ฉ์๋ onAttach()์ onDetach()๊ฐ ์๋ค.
onAttach()๋ fragment๊ฐ FragmentManager์ ์ถ๊ฐ๋๊ณ host Activity์ ์ฐ๊ฒฐ๋๋ฉด ํธ์ถ๋จ
onDetach()๋ fragment๊ฐ FragmentManager์์ ์ญ์ ๋์๋ host Activity์์ ๋ถ๋ฆฌ๋๋ฉด ํธ์ถ๋จ
๐๏ธKEY POINT๐๏ธ ์ก์ / ์ก์์ 2๊ฐ์ง๋ก ๋๋์ด์ ์ค๋ช ํด๋ณด์ธ์.
Activity -> Fragment ๋ activity์์ ํด๋น fragment์ newInstance์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด ๋ณด๋ด๋ฉด fragment์์ bindingํด์ค ํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ ๋ฒ๋ค์ฌ์ฉ
Fragment -> Activity๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ interface๋ฅผ ๋ง๋ค์ด์ค๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ Fragment์์ FragmentDataListener interface๋ฅผ ๊ตฌํํด์ ๋ง๋ค์ด๋ onDataReceivedํจ์๋ก ๋ณด๋ธ๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ Activity์์ FragmentDataListener๋ฅผ ์์๋ฐ์ onDataReceivedํจ์๋ก ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ค.
ViewModel์ activityViewModels() ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๊ณต์
๐๏ธKEY POINT๐๏ธ [๊ฐ์ฒด, ์ฐธ์กฐ, ์ค๋ ๋, null] ์ด๋ผ๋ ์ฉ์ด๋ฅผ ํ์ฉํด๋ณด์ธ์.
stop-the-world GC๋ฅผ ์คํํ๊ธฐ ์ํด JVM์ด ์ฑ์คํ์ ๋ฉ์ถค
Heap๊ณต๊ฐ(์ค๋ธ์ ํธ์ ํด๋์ค๋ค ํ ๋น๋จ)์์ ๋์ด์ ์ฐธ์กฐ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๊ฑฐํ๋ค.
์๋ฅผ๋ค์ด, ์คํ์ ๋ณ์๊ฐ ํ์ ์ค๋ธ์ ํธ๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ค๊ฐ ๋ณ์๊ฐ ์ฌ๋ผ์ง๋ฉด ํด๋น ์ค๋ธ์ ํธ๋ ์๋ฌด๋ฐ ์ฐธ์กฐ๊ฐ ์์ด์ ธ ๊ฐ๋น์ง์ปฌ๋ ํฐ๊ฐ ์๊ฑฐํ๊ฒ๋จ
์๋๋ก์ด๋์์ ART์์์ ์๋ํ๊ฒ ๋๋ฉฐ ๋ฉ๋ชจ๋ฆฌ๋ถ์กฑ, ์ฑ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ ํ, ํ๋ฉดํ์ ํ ๋ ๋ณดํต ํธ๋ฆฌ๊ฑฐ๋จ
๐๏ธKEY POINT๐๏ธ REST ๊ตฌ์ฑ ์์ ์ดํดํ๊ธฐ, RESTful ์์น ์ค๋ช
ํ๊ธฐ.
REST์ ์ค๊ณ๊ท์น์ ์์ง์ผ ์ค๊ณ๋ API
1. ๊ฐ ํจ์์ ๋ง๋ ๋์ (GET, POST, PUT, PETCH, DELETE )
2. uri๊ฒฝ๋ก์ ์๋ฌธ์์ฌ์ฉ
3. (-)ํ์ดํ์ ๊ฐ๋
์ฑ์ ๋์ด๋๋ฐ์ฌ์ฉ
4. (_)๋ฐ์ค์ ์ฌ์ฉX
5. ๊ณ์ธต๊ด๊ณ๋ฅผ (/)์ฌ๋์๋ก ํํํ๊ณ ๋ง์ง๋ง์ ์ฌ๋์๋ฅผ ํํํ์ง ์์
6. ํ์ฅ์๋ ํฌํจํ์ง์์
๐๏ธKEY POINT๐๏ธ [์ ์ง๋ณด์, ํ์ฅ์ฑ, ํ ์คํธ ์ฉ์ด์ฑ] + ํด๋ฆฐ ์ํคํ ์ฒ์ ์ฃผ์ ์์น ์ดํดํ๊ธฐ.
์ ์ง๋ณด์์ฑ ํ์ฅ์ฑ ํ
์คํธ์ฉ์ด์ฑ์ ์ํด ์ค๊ณ๋ ์ํํธ์จ์ด ์ํคํ
์ณ
์ํํธ์จ์ด๋ ๋ณ๊ฒฝํ๊ธฐ ์ฌ์์ผํ๋ค.
์ฅ์ ์คํ๋๋ ์์คํ
์ ๊ฐ๋ถ๋ถ์ ๋
๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐํ๊ณ ํ
์คํธํ ์์๋ ํ๊ฒฝ์ ์กฐ์ฑํ ์์๋ค.
์๋ฅผ๋ค์ด Retrofit์ ConvertFactory๋ฅผ moshi Factory์์ GsonconvertFactory๋ก ๋ณ๊ฒฝํด์ผํ๋ค๋ฉด networkํต์ ํ๋ ๊ณณ์ ๋ชจ๋ ์ฐพ์์ ๋ณ๊ฒฝํด์ผํ๋๋ฐ ํด๋ฆฐ์ํคํ
์ณ๋ผ๋ฉด networkํต์ ์ ๋ด๋นํ๋ layer๋ง ํ์ธํ networkํต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ณ๊ฒฝ์์
๋งํ๋ฉด๋๋ค.
๐๏ธKEY POINT๐๏ธ ์์ ์ฑ, ์ฌ์ฉ์ฑ, ์์ด๋์ด ์ค์ฌ์ผ๋ก ์๊ฐํด๋ณด์ธ์.
์ฒซ๋ฒ์งธ๋ก ์์ด๋์ด์ ๊ธฐํ
์ฑ์ด๋ผ๋ ๊ฑด ๊ฒฐ๊ตญ ์ฌ์ฉํด์ผ ์๋ฏธ๊ฐ ์๋ค.
์๋ฌด๋ฆฌ ์์ ์ฑ์๊ณ ํธ๋ฆฌํ ์ฑ์ ๋ง๋ค์ด๋ ํ์๊ฐ ์๋ค๋ ์ฑ์ ์ฌ์ฉ๋์ง ์๋๋ค.
๋๋ฒ์งธ๋ก ์ฌ์ฉํ๋๋ฐ ๋ถํธํจ(์ฌ์ฉ์ฑ)
์ข ๋ ์ถ์ด ํธํด์ง๊ธฐ ์ํด ์ฑ์ ์ฌ์ฉํ๋ ๊ฒ์ธ๋ฐ ๋ถํธํจ์ด ๋์ด๋๋ค๋ฉด ์ฌ์ฉํ์ง ์๊ฒ ๋ ๊ฒ์ด๋ค.
ํ ์์๋ ๋์์ธ
์๋ฌด๋ฆฌ ๋์์ธ์ด ๋ณ๋ก์ฌ๋ ๊ทธ ์ฑ์ ๊ธฐ๋ฅ์ด ํ์ํ๋ค๋ฉด ์ฌ์ฉํ ์ ๋ฐ์ ์์ ๊ฒ์ด๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ผ๋จ ํ์ํ ์ฑ๊ณผ ๊ธฐ๋ฅ์ ๋ง๋ค๊ณ ๋์์ธ์ ์ฒ์ฒํ ๋ฐ์ ์์ผ๋๊ฐ๋ ๊ฒ๋ ์ข๋ค๊ณ ์๊ฐํ๋ค.
ํ์ง๋ง ์์ฆ์ ๋น์ทํ ๊ธฐ๋ฅ์ ๊ฐ์ง ์ฑ๋ค์ด ๋ง๊ธฐ ๋๋ฌธ์ ํ์ฌ ์ฑ์ด ๊ธฐ๋ฅ์ด๋ ํ์์ ๋ํ ํ์คํ ์ฐ์๊ฐ ์๋ค๋ฉด ๋์์ธ์ด ๋งค์ฐ ์ค์ํ๋ค.
๐๏ธKEY POINT๐๏ธ [ํธ์ถ, ๋ฐํ, ์ฌ์ฌ์ฉ, ๋ฉ์๋, ์์ธ์ฒ๋ฆฌ] ๋ฑ ํค์๋ ์ฌ์ฉํ๊ธฐ. ์์) view ์ฌ์ฌ์ฉ์ ์ฃผ์์ฌํญ, ํน์ ์ํฉ์์ ํน์ ๋ฉ์๋ ์ฐ์ง ์๊ธฐ, DiffUtil ์ฌ์ฉ ๋ฑ ๋ฐฉ๋ฒ์ ์์ฃผ ๋ง์ต๋๋ค!!
1. onBindViewHoler ํธ์ถ์ ์ต์ํํ๊ธฐ ์ํด setHasStableIds(true), getItemId๋ฅผ ์ฌ์ฉํ๋ค.
๊ฐ์ด ๋ณ๊ฒฝ๋ onBindViewHolder๋ฅผ ํธ์ถํ๊ฑฐ๋ ํธ์ถ๋ ์์ดํ
์ id๊ฐ ์ด์ position์์ดํ
์ ์ด๋ฏธ ์กด์ฌํ ๋ onBindViewHolderํจ์๋ฅผ ํธ์ถํ์ง ์๊ณ ์ด์ ์ ๊ฐ์ id๋ฅผ ๊ฐ์ง ๋ทฐ๋ฅผ ๋์ ๋ณด์ฌ์ค๋ค.
2. ๋๊ฐ์ ๋ฐ์ดํฐ ๋ชฉ๋ก์ ๋น๊ตํด ์ฐจ์ด๊ฐ ์๋ ์์ดํ
๋ง ์
๋ฐ์ดํธํ๋ DiffUtill์ฌ์ฉ
1. ๋ณดํต ListAdapter๋ฅผ ์์๋ฐ์ DiffUtil์ ๋ง์ด ์ฌ์ฉํจ
2. DiffUtil์ ์ฌ์ฉํ๋ฉด setHasStableIds(true), getItemId()๋ ์ฌ์ฉํ์ง ์์๋๋จ
๐๏ธKEY POINT๐๏ธ [ํจ์จ์ฑ, ๋ณตํฉ์ฑ, ์ค๋ ๋, ์ฝ๋ฃจํด] ๋ฑ ํค์๋ ์ฌ์ฉํ๊ธฐ.
๋๊ธฐํ๋ก๊ทธ๋๋ฐ์ ํ๋ฒ์ ํ๊ฐ์ฉ ์์
์ด ๋๋์ผ๋ง ๋ค์ ์์
์ ํ ์์๋ ๋ฐฉ์์ด๊ณ ,
๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ฌ๋ฌ๊ฐ์ ์์
์ ๋์์ ์ํํ ์ ์๋ ๋ฐฉ์
ํ๋ก๊ทธ๋จ์ ํผํฌ๋จผ์ค์ ์๋๋ฅผ ํฅ์์ํฌ์์๋ค.
์ฝ๋ฃจํด์ ์ผ์ข
์ ๊ฒฝ๋ ์ฐ๋ ๋๋ก ๋์์ฑ์์
์ ๊ฐํธํ๊ฒ ์ฒ ํ ์์๊ฒ ํด์ฃผ๋ ์ญํ
์ฝ๋ฃจํด์ ๋น์ ์ ์ ๋ฉํฐํ์คํน, ์ค๋ ๋๋ ์ ์ ์ ๋ฉํฐํ์คํน
์ฝ๋ฃจํด์ ๋ณํ์ฑ(๋์์ฑ)์ ์ ๊ณตํ๊ณ ๋ณ๋ ฌ์ฑ์ ์ ๊ณตํ์ง ์๋๋ค.
RxJava๋ ๋ฌ๋์ปค๋ธ๊ฐ ์๋นํจ
launch ์์์๋ ์์ฐจ์ ์ผ๋ก ์คํ๋๊ธฐ ๋๋ฌธ์ ์ฝ๋ฃจํด๋ด์์ ๋ง์น ๋๊ธฐ ์ฝ๋์ฒ๋ผ ์๋ํ๋ค.