๊นจ์•Œ ๊ฐœ๋… ๐Ÿ“‘/Android

[Android] UI architecture - Phases

interfacer_han 2025. 2. 27. 12:06

#1 ๊ฐœ์š”

 

Jetpack Compose ๋‹จ๊ณ„  |  Android Developers

์ด ํŽ˜์ด์ง€๋Š” Cloud Translation API๋ฅผ ํ†ตํ•ด ๋ฒˆ์—ญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Jetpack Compose ๋‹จ๊ณ„ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด ์ •๋ฆฌํ•˜๊ธฐ ๋‚ด ํ™˜๊ฒฝ์„ค์ •์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜์„ธ์š”. ๋Œ€๋ถ€๋ถ„์˜ ๋‹ค๋ฅธ UI ๋„๊ตฌ ํ‚คํŠธ์™€ ๋งˆ์ฐฌ๊ฐ€

developer.android.com

์œ„ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋‚˜์˜ ์–ธ์–ด๋กœ ์ •๋ฆฌํ–ˆ๋‹ค.

 

#2 Compose Runtime์˜ 3๋‹จ๊ณ„

#2-1 ๋„์‹๋„

Jetpack Compose๊ฐ€ UI๋ฅผ ๊ทธ๋ ค๋‚ด๋Š” ๊ณผ์ •์˜ ๋„์‹๋„. Layout ๋‹จ๊ณ„๋Š” ์ด ๋‹จ๊ณ„๋Š” ์ธก์ •(measurement)๊ณผ ๋ฐฐ์น˜(placement)๋ผ๋Š” ๋‘ ๊ฐ€์ง€์˜ ํ•˜์œ„ ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ๊ฐ ๋‹จ๊ณ„์— ๋Œ€ํ•œ ๊ฐ„๋ฝํ•œ ์„ค๋ช…์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

1. Composition: '๋ฌด์—‡'(What)์„ ๋ณด์—ฌ์ค„์ง€ ๊ฒฐ์ •. '๋ฌด์—‡'์ด๋ž€, ํ›„์ˆ ํ•  UI Tree๋ฅผ ๋งํ•œ๋‹ค.
2. Layout: ์–ด๋””(Where)์—, ์–ด๋–ค ํฌ๊ธฐ๋กœ ๋‘˜ ์ง€ ๊ฒฐ์ •. 
    2-1. Measurement (์ธก์ •): ์ปจํ…Œ์ด๋„ˆ ์š”์†Œ์™€ ๊ทธ ์ปจํ…Œ์ด๋„ˆ์— ๋“ค์–ด๊ฐˆ ์ž์‹ ์š”์†Œ๋“ค์ด ์ž์‹ ์˜ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ •.
    2-2. Placement (๋ฐฐ์น˜): ๊ฐ๊ฐ์˜ ์ปจํ…Œ์ด๋„ˆ ์š”์†Œ์™€ ์ž์‹ ์š”์†Œ๋ฅผ 2D ์ขŒํ‘œ๊ณ„์—์„œ ์ ์ ˆํ•œ ์œ„์น˜์— ๋ฐฐ์น˜.
3. Drawing: Layout ๋‹จ๊ณ„์—์„œ ๊ฒฐ์ •๋œ๋Œ€๋กœ ํ™”๋ฉด์— UI๋ฅผ ๊ทธ๋ฆผ.

 

#2-2 ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„

https://developer.android.com/develop/ui/compose/architecture#udf

๋งˆ์น˜ ๋ฌผ์ด ์œ„์—์„œ ์•„๋ž˜๋กœ ํ๋ฅด๋“ฏ, Compose์˜ 3๋‹จ๊ณ„๋Š” ๊ฐ ๋‹จ๊ณ„์˜ ์ˆœ์„œ๋ฅผ ์ง€ํ‚ค๋ฉฐ ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„(Unidirectional Data Flow, UDF)์„ ๋”ฐ๋ฅธ๋‹ค. ์ผ๋ถ€ ํŠน๋ณ„ํ•œ ์ปดํฌ์ €๋ธ”์—์„œ๋Š” ์ด ํ๋ฆ„์— ์—ญํ–‰ํ•˜๊ธฐ๋„ ํ•˜๋Š”๋ฐ ๊ฐ€๋ น BoxWithConstraints, LazyColumn๋‚˜ LazyRow๋Š” ๋ถ€๋ชจ์˜ Layout ๋‹จ๊ณ„๊ฐ€ ์ž์‹์˜ Composition ๋‹จ๊ณ„์— ์˜์กดํ•œ๋‹ค.

 

#3 Composition phase

https://developer.android.com/develop/ui/compose/phases#composition

์˜์ƒ ์†์˜ 'layout node'๋Š” ์ปจํ…Œ์ด๋„ˆ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” node๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค (์–ด๋–ป๊ฒŒ ๋ถ€๋ฅด๋Š” ์ง€๋Š” ์ „ํ˜€ ์ค‘์š”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์‹œํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋„ ๋œ๋‹ค). ์ด๋Ÿฌํ•œ UI Tree ๊ฐ ๋…ธ๋“œ์˜ ์ƒ์„ฑ์—” ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์˜๋„๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธใ†์กฐ๊ฑด๋ฌธ์ด ๊ด€์—ฌํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ์ฆ‰ ์ฝ”๋“œ ์ž์ฒด๋Š” ๊ฐ™๋”๋ผ๋„, ๋‚ด๋ถ€ ๋ณ€์ˆ˜ ๋“ฑ์˜ ๋ณ€ํ™”๋กœ UI Tree์˜ ๋ชจ์–‘์ด ์–ผ๋งˆ๋“ ์ง€ ๋ณ€ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์–˜๊ธฐ๋‹ค.

 

#4 Layout phase

#4-1 ์• ๋‹ˆ๋ฉ”์ด์…˜

https://developer.android.com/develop/ui/compose/phases#layout

Layout ๋‹จ๊ณ„๋Š” Composition ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑํ–ˆ๋˜ UI Tree์— ์˜์กดํ•œ๋‹ค. Layout ๋‹จ๊ณ„์—์„œ๋Š” ๊ฐ ๋…ธ๋“œ์˜ ํ™”๋ฉด ์ƒ ํฌ๊ธฐ๋ฅผ ์ธก์ •(Measurement)ํ•˜๊ณ  ์–ด๋””์— ๋ฐฐ์น˜(Placement)ํ•  ์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

 

#4-2 ์ˆœ์„œ

https://kenel.tistory.com/299

์ž์„ธํ•œ ์„ค๋ช…์ด ๊ณ๋“ค์—ฌ์ง„ ์ธก์ • ๋ฐ ๋ฐฐ์น˜์˜ ์ˆœ์„œ๋‹ค.

 

#5 Drawing phase

#5-1 ์• ๋‹ˆ๋ฉ”์ด์…˜

https://developer.android.com/develop/ui/compose/phases#drawing

๊ฐ ๋…ธ๋“œ๋ฅผ ๊ทธ๋ ค๋‚ด์–ด ์‹ค์ œ ์šฐ๋ฆฌ๊ฐ€ ๋ณด๋Š” ํ™”๋ฉด์œผ๋กœ ๋งŒ๋“œ๋Š” ๋‹จ๊ณ„๋‹ค.

#5-2 ์ˆœ์„œ

https://developer.android.com/develop/ui/compose/phases#drawing

Composition ๋‹จ๊ณ„์—์„œ ๋งŒ๋“ค์—ˆ๋˜ UI Tree๋ฅผ ๋‹ค์‹œ ์ˆœํšŒํ•œ๋‹ค. ์œ„์—์„œ ์•„๋ž˜๋กœ ๊ฐ€๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ˆœํšŒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ๋ถ€๋ชจ๊ฐ€ ๋จผ์ € ๊ทธ๋ ค์ง„๋‹ค.

 

#6 ์ด์–ด์ง€๋Š” ๊ธ€

 

[Android] UI architecture - Phase์™€ State

#1 ์ด์ „ ๊ฒŒ์‹œ๊ธ€https://kenel.tistory.com/300์œ„ ๊ฒŒ์‹œ๊ธ€์—์„œ ์ด์–ด์ง„๋‹ค. #2 State [Android] Jetpack Compose - State ๊ธฐ์ดˆ#1 ๊ฐœ์š” ์ƒํƒœ ๋ฐ Jetpack Compose  |  Android Developers์ด ํŽ˜์ด์ง€๋Š” Cloud Translation API๋ฅผ ํ†ตํ•ด ๋ฒˆ์—ญ๋˜

kenel.tistory.com

์œ„ ๊ฒŒ์‹œ๊ธ€์—์„œ ์ด์–ด์ง„๋‹ค.