๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[Android] Custom View ์ƒํƒœ ์ €์žฅ + ์ปค์Šคํ…€ ์บ˜๋ฆฐ๋”๋ทฐ ์ œ์ž‘ ๊ธฐ๋ก

https://www.charlezz.com/?p=29013 

 

Android์—์„œ View์˜ ์ƒ๋ช…์ฃผ๊ธฐ | ์ฐฐ์Šค์˜ ์•ˆ๋“œ๋กœ์ด๋“œ

https://proandroiddev.com/the-life-cycle-of-a-view-in-android-6a2c4665b95e์„ ๋ฒˆ์—ญํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ์„ ์‹คํ–‰ํ•  ๋•Œ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ์Šคํฌ๋ฆฐ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด View๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค. View ํด๋ž˜์Šค๋Š” ์‚ฌ

www.charlezz.com

์œ„ ๋ธ”๋กœ๊ทธ์˜ ์ƒํƒœ ์ €์žฅ๊ณผ ๋ณต๊ตฌ ์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ์ž˜ ํ™œ์šฉํ–ˆ๋‹ค. ์ฐฐ์Šค๋‹˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค๐Ÿ‘

 


์ปค์Šคํ…€๋ทฐ๋กœ ๋‹ฌ๋ ฅ์„ ๋งŒ๋“ค์—ˆ๋‹ค. ๋””์ž์ธ ๊ฐ€์ด๋“œ๋ฅผ ์ ์šฉํ•˜๊ณ  ์•ฑ ์„ฑ๋Šฅ์„ ์œ„ํ•ด์„œ๋Š” ์ปค์Šคํ…€๋ทฐ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ธ์ •ํ•  ์ˆ˜ ๋ฐ–์— ์—†์—ˆ๋‹ค.

๋‹ฌ๋ ฅ์—์„œ ์ดˆ๊ธฐํ™”๋กœ ์„ ํƒ๋˜๊ฑฐ๋‚˜(์˜ค๋Š˜ ๋‚ ์งœ๊ฐ€ ์„ ํƒ๋จ), ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ ๋‚ ์งœ๋Š” ๊ฐ•์กฐ๋˜์–ด ํ‘œ์‹œ๋˜๋Š” (๋‹น์—ฐํ•œ) UI์ด๋‹ค.

์ปค์Šคํ…€๋ทฐ ๋‹ฌ๋ ฅ์ด ๋…ธ์ถœ๋˜๋Š” ํ™”๋ฉด์—์„œ ๋‹ค์Œ depth ํ™”๋ฉด์œผ๋กœ ์ง„์ž…ํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋“ค์ด ์žˆ๋Š”๋ฐ, Jetpack Navigation์„ ์ด์šฉํ•ด Fragment๋“ค๋กœ ํ™”๋ฉด์„ ์ด๋™ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ด ๋‹ฌ๋ ฅ์ด ์žˆ๋Š” ํ™”๋ฉด์ด ์„œ๋น„์Šค์˜ ๋ฉ”์ธ ํ™”๋ฉด์ด๊ณ , ์ด ์„œ๋น„์Šค๋ฅผ Activity ํ•˜๋‚˜์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•  ๊ฒƒ์ด๋ผ๊ณ  ํŒ๋‹จํ–ˆ๋‹ค. (๊ทธ๋ž˜์•ผ ํ•˜๋Š”๋ฐ๐Ÿค” depth๋“ค์„ Activity๋กœ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ Navigation์„ ๋‘๊ณ  ์ •๋ง ๋งŽ์ด ๊ณ ๋ฏผํ–ˆ๋‹ค.)

๋ฌธ์ œ๋Š” ์ปค์Šคํ…€๋ทฐ๊ฐ€ ์žˆ๋Š” Fragment(A ๋ผ ๋ถ€๋ฅด๊ฒ ๋‹ค.)์—์„œ ๋‹ค๋ฅธ Fragment ํ™”๋ฉด(B๋ผ ๋ถ€๋ฅด๊ฒ ๋‹ค.)์œผ๋กœ ๊ฐ”๋‹ค๊ฐ€ ๋Œ์•„์˜ค๋ฉด ์ปค์Šคํ…€๋ทฐ์˜ ์ƒํƒœ๊ฐ€ ์ดˆ๊ธฐํ™”๋œ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. 

A์—์„œ B๋กœ ํ™”๋ฉด์ด ๋…ธ์ถœ๋˜๋ฉด A์˜ ๋ทฐ๋Š” destroyed ๋๋‹ค. B์—์„œ A๋กœ ๋Œ์•„์˜ค๋ฉด A์˜ ๋ทฐ๋Š” ๋‹ค์‹œ created ๋˜์–ด ์ปค์Šคํ…€๋ทฐ๋„ ๋‹ค์‹œ ์ดˆ๊ธฐํ™”๋˜์–ด ๊ทธ๋ ค์กŒ๋‹ค.

 

https://developer.android.com/codelabs/kotlin-android-training-lifecycles-logging?index=..%2F..android-kotlin-fundamentals#0
https://developer.android.com/guide/fragments/lifecycle

 

 

์—ฌ๊ธฐ์„œ ๋˜ ๊ณ ๋ฏผ.

- 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์—์„œ ์ €์žฅ๋œ ๋‚ ์งœ๋ฅผ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์ปค์Šคํ…€ ๋ทฐ๋ฅผ ๊ทธ๋ ค์ฃผ๋‹ˆ, ์›ํ•˜๋Š” ๋Œ€๋กœ ์ •์ƒ๋™์ž‘ํ•œ๋‹ค.

 

https://developer.android.com/topic/libraries/architecture/viewmodel

 


์ด ๊ณผ์ • ๋‚ด๋‚ด ๋Š๋‚€ ๊ฒƒ์€, lifecycle์„ ์•„๋Š” ๊ฒƒ์ด ์ •๋ง ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.