๐ŸŒ€Composition Phase & Runtime

์ด์˜ํ›ˆยท2025๋…„ 4์›” 18์ผ
0

All About Compose

๋ชฉ๋ก ๋ณด๊ธฐ
4/5
post-thumbnail

๐Ÿ’ก Jetpack Compose์˜ Composable์€ ์–ธ์ œ, ์–ด๋–ป๊ฒŒ ์‹คํ–‰๋ ๊นŒ?

Jetpack Compose๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด "์–ด๋–ค ์ปดํฌ์ €๋ธ”์ด ์–ธ์ œ ๋‹ค์‹œ ์‹คํ–‰๋˜๋Š” ๊ฑธ๊นŒ?"๋ผ๋Š” ๊ถ๊ธˆ์ฆ์ด ๋“ค ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๊ธ€์—์„œ๋Š” Compose ๋‚ด๋ถ€์˜ ์ž‘๋™ ๋ฐฉ์‹, ํŠนํžˆ ์ปดํŒŒ์ผ๋Ÿฌ์™€ ๋Ÿฐํƒ€์ž„์˜ ์—ญํ• , ๊ทธ๋ฆฌ๊ณ  Composition Phase๊ฐ€ ์–ด๋–ค ์‹์œผ๋กœ UI ์žฌ๊ตฌ์„ฑ์— ๊ด€์—ฌํ•˜๋Š”์ง€๋ฅผ ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ” 1. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” Composable ํ•จ์ˆ˜์˜ ์‹คํ–‰ ์—ฌ๋ถ€๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฒฐ์ •ํ• ๊นŒ?

์ •ํ™•ํžˆ ๋งํ•˜๋ฉด, Composable ํ•จ์ˆ˜๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰๋ ์ง€ ๋ง์ง€๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์•„๋‹Œ Compose Runtime์ด ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
์ปดํŒŒ์ผ๋Ÿฌ๋Š” @Composable ํ•จ์ˆ˜์— ํŠน๋ณ„ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ ,
์‹ค์ œ ์‹คํ–‰ ์‹œ์ ๊ณผ ์žฌ๊ตฌ์„ฑ(recomposition)์€ Runtime์ด composition ๊ณผ์ •์—์„œ ์ƒํƒœ ์ถ”์ ์„ ํ†ตํ•ด ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


๐Ÿง  ์ข€ ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด

Jetpack Compose๋Š” Kotlin Compiler Plugin์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
์ฆ‰, @Composable์ด ๋ถ™์€ ํ•จ์ˆ˜๋Š” ์ปดํŒŒ์ผ ์‹œ์ ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠธ๋žœ์Šคํผ(transform) ์ž‘์—…์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด:

@Composable
fun MyComposable() {
    val count by remember { mutableStateOf(0) }
    Text("Count: $count")
}

์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ด๋ฅผ ๋‚ด๋ถ€์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๋น„์Šทํ•œ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค:

fun MyComposable($composer: Composer, $changed: Int) {
    val countState = remember($composer, ...)
    val count = countState.value

    Text($composer, "Count: $count")
}

countState.value๊ฐ€ ์ฝํžˆ๋Š” ์ˆœ๊ฐ„, Compose Runtime์€
"์ด ์ปดํฌ์ €๋ธ”์€ count์— ์˜์กดํ•œ๋‹ค"๋Š” ์‚ฌ์‹ค์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‚˜์ค‘์— count.value๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด,
์ด ๊ฐ’์„ ์ฝ์—ˆ๋˜ ์ปดํฌ์ €๋ธ”๋งŒ ๋‹ค์‹œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.


โœ… ํ•ต์‹ฌ ์š”์•ฝ

์ฃผ์ฒด์—ญํ• 
Compose ์ปดํŒŒ์ผ๋Ÿฌ@Composable ํ•จ์ˆ˜์— ์ƒํƒœ ์ถ”์  ๋ฐ recomposition ํŠธ๋ž˜ํ‚น์šฉ ์ฝ”๋“œ ์‚ฝ์ž…
Compose RuntimeState๊ฐ€ ์ฝํžˆ๋Š” ์‹œ์ ์„ ๊ฐ์ง€ํ•˜๊ณ , ๊ทธ ๊ฐ’์„ ์ฐธ์กฐํ•œ ์ปดํฌ์ €๋ธ”๋งŒ ์ถ”ํ›„ ๋‹ค์‹œ ์‹คํ–‰

๐Ÿงฉ 2. Composition Phase๋ž€?

Composition Phase๋Š” Composable ํ•จ์ˆ˜๊ฐ€ ์‹ค์ œ๋กœ ์‹คํ–‰๋˜๋Š” ์‹œ์ ์ด์ž,
UI ๊ตฌ์กฐ์™€ ์ƒํƒœ ์˜์กด์„ฑ์„ ์ •์˜ํ•˜๋Š” "๋นŒ๋“œ ๋‹จ๊ณ„"์ž…๋‹ˆ๋‹ค.

Compose๋Š” ํ•˜๋‚˜์˜ UI ํ”„๋ ˆ์ž„์ด ๊ทธ๋ ค์ง€๊ธฐ๊นŒ์ง€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.


๐Ÿ”„ Compose์˜ ๋‚ด๋ถ€ Lifecycle ์š”์•ฝ

  1. Composition Phase
    • @Composable ํ•จ์ˆ˜๋“ค์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
    • ์–ด๋–ค State๋ฅผ ์ฝ์—ˆ๋Š”์ง€ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.
    • ์–ด๋–ค UI๋ฅผ ๊ตฌ์„ฑํ• ์ง€ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  2. Layout Phase
    • ์ปดํฌ์ €๋ธ”๋“ค์ด ๋ฐ˜ํ™˜ํ•œ UI ์š”์†Œ๋“ค์˜ ํฌ๊ธฐ, ์œ„์น˜๋ฅผ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Draw Phase
    • ์‹ค์ œ๋กœ ํ™”๋ฉด์— UI๋ฅผ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ Composition Phase์—์„œ ํ•˜๋Š” ์ผ

ํ•ญ๋ชฉ์„ค๋ช…
Composable ํ•จ์ˆ˜ ์‹คํ–‰์–ด๋–ค UI๋ฅผ ๋งŒ๋“ค์ง€ ๊ฒฐ์ •
State ์˜์กด์„ฑ ์ถ”์ ์–ด๋–ค ์ƒํƒœ(State)๋ฅผ ์ฝ๋Š”์ง€ ์ถ”์ 
Recomposition ์กฐ๊ฑด ๊ธฐ๋ก์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ์–ด๋–ค ์ปดํฌ์ €๋ธ”์„ ๋‹ค์‹œ ์‹คํ–‰ํ• ์ง€ ๊ธฐ์–ต

๐Ÿ” Recomposition์€ ์–ด๋–ป๊ฒŒ ์ผ์–ด๋‚ ๊นŒ?

State ๊ฐ’์ด ๋ฐ”๋€Œ๋ฉด, ๊ทธ ๊ฐ’์„ ์ฝ์—ˆ๋˜ ์ปดํฌ์ €๋ธ”๋งŒ ๋‹ค์‹œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
์ด ๋•Œ ๋‹ค์‹œ ์‹คํ–‰๋˜๋Š” ๊ณผ์ •์„ "Recomposition"์ด๋ผ๊ณ  ํ•˜๋ฉฐ,
๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ๋‹ค์‹œ Composition Phase๋ฅผ ๊ฑฐ์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


๐ŸŽญ ์ „์ฒด ํ๋ฆ„ ๋น„์œ : ๋ฌด๋Œ€์™€ ๋ฐฐ์šฐ

์กฐ๊ธˆ ๋” ์‰ฝ๊ฒŒ ๋น„์œ ํ•ด๋ณด๋ฉด,

  • ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ฌด๋Œ€๋ฅผ ์„ค์น˜ํ•˜๋Š” ์Šคํƒœํ”„์ž…๋‹ˆ๋‹ค.
    ์–ด๋–ค ๋ฐฐ์šฐ(Composable)๊ฐ€ ์–ด๋–ค ์†Œํ’ˆ(State)์„ ์“ฐ๋Š”์ง€ ํ‘œ์‹œํ•ด ๋‘ก๋‹ˆ๋‹ค.
  • Runtime์€ ์—ฐ์ถœ๊ฐ€์ด์ž ๋ฌด๋Œ€๊ฐ๋…์ž…๋‹ˆ๋‹ค.
    ์†Œํ’ˆ์ด ๋ฐ”๋€Œ๋ฉด, ๊ทธ ์†Œํ’ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฐ์šฐ๋งŒ ๋‹ค์‹œ ๋ฌด๋Œ€์— ์„ธ์›๋‹ˆ๋‹ค.
    (์ด๊ฒŒ ๋ฐ”๋กœ Recomposition์ž…๋‹ˆ๋‹ค!)

โœ… ๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ

Jetpack Compose์˜ ํ•ต์‹ฌ์€ ์ƒํƒœ ๊ธฐ๋ฐ˜ UI์ž…๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ด ์ƒํƒœ ์ถ”์ ์ด ๋‹จ์ˆœํ•œ if-else ๋กœ์ง์ด ์•„๋‹ˆ๋ผ,
์ปดํŒŒ์ผ๋Ÿฌ์™€ ๋Ÿฐํƒ€์ž„์ด ํ˜‘๋ ฅํ•˜์—ฌ UI์˜ ํšจ์œจ์ ์ธ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค๋Š” ์ ์ด ๋งค์šฐ ์ธ์ƒ์ ์ž…๋‹ˆ๋‹ค.

์ด ํ๋ฆ„์„ ์ดํ•ดํ•˜๊ณ  ๋‚˜๋ฉด, ๋ถˆํ•„์š”ํ•œ recomposition์„ ํ”ผํ•˜๊ณ  ๋” ์ตœ์ ํ™”๋œ Compose UI๋ฅผ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ ๊ฒ๋‹ˆ๋‹ค!

profile
์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹น

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