TIL #113

lociยท2024๋…„ 9์›” 27์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
105/111
post-custom-banner

Fragment ์ƒ๋ช… ์ฃผ๊ธฐ๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‚˜์š”?

๐Ÿ—๏ธKEY POINT๐Ÿ—๏ธ ๊ฐ ๋ฉ”์„œ๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ํ˜ธ์ถœ๋˜๋Š”์ง€, ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ.

fragmentManager๊ฐ€ fragment๊ฐ€ ์–ด๋–ค ์ƒํƒœ์—ฌ์•ผํ•˜๋Š”์ง€ ํ™•์ธ ํ›„ ๊ทธ์ƒํƒœ๋กœ ์ „ํ™˜ํ•˜๋Š” ์ผ์„ ๋‹ด๋‹นํ•˜๊ณ 
fragment ์ˆ˜๋ช…์ฃผ๊ธฐ๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด FragmentManager๋Š” activity์— ์—ฐ๊ฒฐํ•˜๊ณ  ๋ถ„๋ฆฌํ•˜๋Š” ์ž‘์—…๋„ํ•œ๋‹ค.
fragment ํด๋ž˜์Šค์—๋Š” ๋‘๊ฐ€์ง€ ์ฝœ๋ฐฑ ๋ฉ”์„œ๋“œ onAttach()์™€ onDetach()๊ฐ€ ์žˆ๋‹ค.
onAttach()๋Š” fragment๊ฐ€ FragmentManager์— ์ถ”๊ฐ€๋˜๊ณ  host Activity์— ์—ฐ๊ฒฐ๋˜๋ฉด ํ˜ธ์ถœ๋จ
onDetach()๋Š” fragment๊ฐ€ FragmentManager์—์„œ ์‚ญ์ œ ๋์„๋•Œ host Activity์—์„œ ๋ถ„๋ฆฌ๋˜๋ฉด ํ˜ธ์ถœ๋จ

onCreate()

  • ํ”„๋ž˜๊ทธ๋จผํŠธ ์ƒ์„ฑ์‹œ ํ˜ธ์ถœ (onAttach๋Š” ์ถ”๊ฐ€๋œ๊ฒƒ, onCreate๋Š” ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ)

onCreateView()

  • ํ”„๋ž˜๊ทธ๋จผํŠธ ๋ทฐ๊ฐ€ ์ดˆ๊ธฐํ™”๋˜๋ฉฐ, ๋ทฐ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. Layout์„ Inflate ํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์ด๋‹ค.

onViewCreated()

  • ๋ทฐ ๊ฐ์ฒด๊ฐ€ ๋ฐ˜ํ™˜๋œ ์งํ›„์— ํ˜ธ์ถœ๋˜๋ฉฐ, ๋ทฐ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Œ์„ ๋ณด์žฅํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ View๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ฑฐ๋‚˜ adapter๋“ค์„ ์ดˆ๊ธฐํ™” ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•˜๋‹ค.

onViewStateRestored()

  • ์ €์žฅํ•ด๋‘” ๋ชจ๋“  state๊ฐ’์ด Fragment์˜ View๊ณ„์ธต๊ตฌ์กฐ์— ๋ณต์›๋์„ ๋•Œ ํ˜ธ์ถœ

onStart()

  • Fragment๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์งˆ ์ˆ˜ ์žˆ์„๋•Œ ํ˜ธ์ถœ

onResume()

  • Fragment๊ฐ€ ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์„๋•Œ ํ˜ธ์ถœ

onPause()

  • ์‚ฌ์šฉ์ž๊ฐ€ Fragment๋ฅผ ๋– ๋‚˜๊ธฐ ์‹œ์ž‘ํ–ˆ์„๋•Œ ํ˜ธ์ถœ, fragment๊ฐ€ ๋ณด์ผ์ˆœ ์žˆ์ง€๋งŒ ํฌ์ปค์Šค๋ฅผ ์žƒ์€์ƒํƒœ

onStop()

  • Fragment๊ฐ€ ํ™”๋ฉด์— ๋”์ด์ƒ ๋ณด์ด์ง€ ์•Š์„๋•Œ ํ˜ธ์ถœ, FragmentTransaction์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋งˆ์ง€๋ง‰ ์ง€์ 

onSaveInstanceState()

  • ํ™”๋ฉดํšŒ์ „๊ณผ ๊ฐ™์€ ์ƒํ™˜์ด ๋ฐœ์ƒํ–ˆ์„๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜

onDestroyView()

  • Fragment์˜ ๋ทฐ๊ฐ€ ์†Œ๋ฉธ์‹œ ํ˜ธ์ถœ, Fragment์— ๋Œ€ํ•œ ๋ชจ๋“  ์ฐธ์กฐ๋ฅผ ์ œ๊ฑฐํ•ด์•ผ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ• ์ˆ˜์žˆ๋‹ค.

onDestroy()

  • Fragment๊ฐ€ ์ œ๊ฑฐ๋˜๊ฑฐ๋‚˜ FragmentManager๊ฐ€ destroy๋์„๊ฒฝ์šฐ ํ˜ธ์ถœ

Activity์™€ Fragment ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๐Ÿ—๏ธKEY POINT๐Ÿ—๏ธ ์†ก์‹  / ์†ก์ˆ˜์‹  2๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„์–ด์„œ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

  • ๋ฐ์ดํ„ฐ ์†ก์‹ ๋งŒ ํ•  ๋•Œ
  • ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹ ์ด ๋ชจ๋‘ ํ•„์š”ํ•  ๋•Œ

Activity -> Fragment ๋Š” activity์—์„œ ํ•ด๋‹น fragment์˜ newInstance์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด ๋ณด๋‚ด๋ฉด fragment์—์„œ bindingํ•ด์ค€ ํ›„ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ ๋ฒˆ๋“ค์‚ฌ์šฉ

Fragment -> Activity๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ interface๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ Fragment์—์„œ FragmentDataListener interface๋ฅผ ๊ตฌํ˜„ํ•ด์„œ ๋งŒ๋“ค์–ด๋‘” onDataReceivedํ•จ์ˆ˜๋กœ ๋ณด๋‚ธ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š” Activity์—์„œ FragmentDataListener๋ฅผ ์ƒ์†๋ฐ›์•„ onDataReceivedํ•จ์ˆ˜๋กœ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

ViewModel์˜ activityViewModels() ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ 

GC, garbage collection ์ด๋ž€ ๋ฌด์—‡์ด๋ฉฐ Android ํ™˜๊ฒฝ์—์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋‚˜์š”?

๐Ÿ—๏ธKEY POINT๐Ÿ—๏ธ [๊ฐ์ฒด, ์ฐธ์กฐ, ์Šค๋ ˆ๋“œ, null] ์ด๋ผ๋Š” ์šฉ์–ด๋ฅผ ํ™œ์šฉํ•ด๋ณด์„ธ์š”.
stop-the-world GC๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด JVM์ด ์•ฑ์‹คํ–‰์„ ๋ฉˆ์ถค
Heap๊ณต๊ฐ„(์˜ค๋ธŒ์ ํŠธ์™€ ํด๋ž˜์Šค๋“ค ํ• ๋‹น๋จ)์—์„œ ๋”์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ˆ˜๊ฑฐํ•œ๋‹ค.
์˜ˆ๋ฅผ๋“ค์–ด, ์Šคํƒ์— ๋ณ€์ˆ˜๊ฐ€ ํž™์— ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ๋ณ€์ˆ˜๊ฐ€ ์‚ฌ๋ผ์ง€๋ฉด ํ•ด๋‹น ์˜ค๋ธŒ์ ํŠธ๋Š” ์•„๋ฌด๋Ÿฐ ์ฐธ์กฐ๊ฐ€ ์—†์–ด์ ธ ๊ฐ€๋น„์ง€์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์ˆ˜๊ฑฐํ•˜๊ฒŒ๋จ
์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ ART์œ„์—์„œ ์ž‘๋™ํ•˜๊ฒŒ ๋˜๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ๋ถ€์กฑ, ์•ฑ์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ „ํ™˜, ํ™”๋ฉดํšŒ์ „ํ• ๋•Œ ๋ณดํ†ต ํŠธ๋ฆฌ๊ฑฐ๋จ

RESTful API ๋ž€ ๋ฌด์—‡์ธ์ง€ ํ•ต์‹ฌ ์›์น™์— ๋งž์ถ”์–ด ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

๐Ÿ—๏ธKEY POINT๐Ÿ—๏ธ REST ๊ตฌ์„ฑ ์š”์†Œ ์ดํ•ดํ•˜๊ธฐ, RESTful ์›์น™ ์„ค๋ช…ํ•˜๊ธฐ.
REST์˜ ์„ค๊ณ„๊ทœ์น™์„ ์ž˜์ง€์ผœ ์„ค๊ณ„๋œ API
1. ๊ฐ ํ•จ์ˆ˜์— ๋งž๋Š” ๋™์ž‘ (GET, POST, PUT, PETCH, DELETE )
2. uri๊ฒฝ๋กœ์— ์†Œ๋ฌธ์ž์‚ฌ์šฉ
3. (-)ํ•˜์ดํ”ˆ์€ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๋Š”๋ฐ์‚ฌ์šฉ
4. (_)๋ฐ‘์ค„์€ ์‚ฌ์šฉX
5. ๊ณ„์ธต๊ด€๊ณ„๋ฅผ (/)์Šฌ๋ž˜์‹œ๋กœ ํ‘œํ˜„ํ•˜๊ณ  ๋งˆ์ง€๋ง‰์— ์Šฌ๋ž˜์‹œ๋ฅผ ํ‘œํ˜„ํ•˜์ง€ ์•Š์Œ
6. ํ™•์žฅ์ž๋Š” ํฌํ•จํ•˜์ง€์•Š์Œ

Android ์—์„œ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋ž€ ๋ฌด์—‡์ด๋ฉฐ ์–ด๋–ค ์žฅ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•ด์•ผ ํ• ๊นŒ์š”?

๐Ÿ—๏ธKEY POINT๐Ÿ—๏ธ [์œ ์ง€๋ณด์ˆ˜, ํ™•์žฅ์„ฑ, ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ] + ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์˜ ์ฃผ์š” ์›์น™ ์ดํ•ดํ•˜๊ธฐ.

์œ ์ง€๋ณด์ˆ˜์„ฑ ํ™•์žฅ์„ฑ ํ…Œ์ŠคํŠธ์šฉ์ด์„ฑ์„ ์œ„ํ•ด ์„ค๊ณ„๋œ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ณ
์†Œํ”„ํŠธ์›จ์–ด๋Š” ๋ณ€๊ฒฝํ•˜๊ธฐ ์‰ฌ์›Œ์•ผํ•œ๋‹ค.
์žฅ์ ์ค‘ํ•˜๋‚˜๋Š” ์‹œ์Šคํ…œ์˜ ๊ฐ๋ถ€๋ถ„์„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ํ…Œ์ŠคํŠธํ• ์ˆ˜์žˆ๋Š” ํ™˜๊ฒฝ์„ ์กฐ์„ฑํ• ์ˆ˜์žˆ๋‹ค.
์˜ˆ๋ฅผ๋“ค์–ด Retrofit์˜ ConvertFactory๋ฅผ moshi Factory์—์„œ GsonconvertFactory๋กœ ๋ณ€๊ฒฝํ•ด์•ผํ•œ๋‹ค๋ฉด networkํ†ต์‹ ํ•˜๋Š” ๊ณณ์„ ๋ชจ๋‘ ์ฐพ์•„์„œ ๋ณ€๊ฒฝํ•ด์•ผํ•˜๋Š”๋ฐ ํด๋ฆฐ์•„ํ‚คํ…์ณ๋ผ๋ฉด networkํ†ต์‹ ์„ ๋‹ด๋‹นํ•˜๋Š” layer๋งŒ ํ™•์ธํ›„ networkํ†ต์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝ์ž‘์—…๋งŒํ•˜๋ฉด๋œ๋‹ค.

์ฃผ์š”์›์น™

  1. ์˜์กด์„ฑ ์—ญ์ „์›์น™ - ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์€ ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋˜๊ณ  ์–‘์ชฝ ๋ชจ๋“ˆ ๋ชจ๋‘ ์ถ”์ƒํ™”์— ์˜์กดํ•ด ๋Š์Šคํ•œ ๊ฒฐํ•ฉ ์œ ์ง€
  2. ๊ฒฝ๊ณ„์˜ ๋ถ„๋ฆฌ - ์‹œ์Šคํ…œ์„ ์—ฌ๋Ÿฌ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ๊ฐ ์˜์—ญ ์‚ฌ์ด์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜์—ฌ ๊ฐ ์˜์—ญ์˜ ๋…๋ฆฝ์„ฑ๋ณด์žฅ
  3. ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ - ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ์— ์˜์กดํ•˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค.

ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•œ ๋ณธ์ธ๋งŒ์˜ ํฌ์ธํŠธ (๊ฐ€์น˜๊ด€) ์ด ์žˆ๋‹ค๋ฉด?

๐Ÿ—๏ธKEY POINT๐Ÿ—๏ธ ์•ˆ์ •์„ฑ, ์‚ฌ์šฉ์„ฑ, ์•„์ด๋””์–ด ์ค‘์‹ฌ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด์„ธ์š”.
์ฒซ๋ฒˆ์งธ๋กœ ์•„์ด๋””์–ด์™€ ๊ธฐํš
์•ฑ์ด๋ผ๋Š” ๊ฑด ๊ฒฐ๊ตญ ์‚ฌ์šฉํ•ด์•ผ ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค.
์•„๋ฌด๋ฆฌ ์•ˆ์ •์„ฑ์žˆ๊ณ  ํŽธ๋ฆฌํ•œ ์•ฑ์„ ๋งŒ๋“ค์–ด๋„ ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์•ฑ์€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.
๋‘๋ฒˆ์งธ๋กœ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ๋ถˆํŽธํ•จ(์‚ฌ์šฉ์„ฑ)
์ข€ ๋” ์‚ถ์ด ํŽธํ•ด์ง€๊ธฐ ์œ„ํ•ด ์•ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ธ๋ฐ ๋ถˆํŽธํ•จ์ด ๋Š˜์–ด๋‚œ๋‹ค๋ฉด ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฒŒ ๋ ๊ฒƒ์ด๋‹ค.

ํ›„ ์ˆœ์œ„๋Š” ๋””์ž์ธ
์•„๋ฌด๋ฆฌ ๋””์ž์ธ์ด ๋ณ„๋กœ์—ฌ๋„ ๊ทธ ์•ฑ์˜ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์‚ฌ์šฉํ•  ์ˆ˜ ๋ฐ–์— ์—†์„ ๊ฒƒ์ด๋‹ค.
๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋‹จ ํ•„์š”ํ•œ ์•ฑ๊ณผ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๊ณ  ๋””์ž์ธ์€ ์ฒœ์ฒœํžˆ ๋ฐœ์ „์‹œ์ผœ๋‚˜๊ฐ€๋Š” ๊ฒƒ๋„ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
ํ•˜์ง€๋งŒ ์š”์ฆ˜์€ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์•ฑ๋“ค์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ์•ฑ์ด ๊ธฐ๋Šฅ์ด๋‚˜ ํ•„์š”์— ๋Œ€ํ•œ ํ™•์‹คํ•œ ์šฐ์œ„๊ฐ€ ์—†๋‹ค๋ฉด ๋””์ž์ธ์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค.

Recyclerview ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ผ๊นŒ์š”?

๐Ÿ—๏ธ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 ์•ˆ์—์„œ๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋ฃจํ‹ด๋‚ด์—์„œ ๋งˆ์น˜ ๋™๊ธฐ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ž‘๋™ํ•œ๋‹ค.


๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ(Garbage Collector)์™€ Mark & Sweep :: ์‚๋ฉœ ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด (tistory.com)

[Android] Coroutine ์ •๋ฆฌ (tistory.com)

profile
ํŽธ๋ฆฌํ•œ ๊ฐœ๋ฐœ์ž
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€