์๋ ํ์ธ์! ๐
์ด๋ฒ ํฌ์คํ
์์๋ @Composable
๊ณผ Jetpack Compose์ ์๋ ๋ฐฉ์์ ๋ํด ์ฝ๊ฒ, ๊ทธ๋ฆฌ๊ณ ์์ธํ๊ฒ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
@Composable
์ด ์ด๋ป๊ฒ ์๋ํ๋์ง, ์ฐจ๊ทผ์ฐจ๊ทผ ์์๋ณด๊ฒ ์ต๋๋ค.
TextView
, Button
๊ณผ ๊ฐ์ View ๊ฐ์ฒด๋ฅผ XML๋ก ์ ์ํ๊ณ ,findViewById()
๋ก ๊ฐ์ ธ์ ์กฐ์ํฉ๋๋ค.โก๏ธ ๋ช ๋ นํ ๋ฐฉ์ (Imperative)
"์ด๊ฑธ ๋ง๋ค๊ณ , ์์ ๋ฐ๊พธ๊ณ , ์์น๋ ์ด๋ ๊ฒ ์ค์ ํด!"
โก๏ธ ์ ์ธํ ๋ฐฉ์ (Declarative)
"์ด๋ฐ ์ํ์ผ ๋๋ ์ด๋ ๊ฒ UI๋ฅผ ๋ณด์ฌ์ค!"
@Composable
์ด๋?@Composable
์ โ์ด ํจ์๋ UI๋ฅผ ๊ทธ๋ฆฌ๋ ํจ์์ผโ ๋ผ๋ ๊ฒ์ ์ปดํ์ผ๋ฌ์๊ฒ ์๋ ค์ฃผ๋ ์ฃผ์(annotation)์
๋๋ค.
@Composable
fun Greeting(name: String) {
Text("Hello, $name")
}
์ด์ฒ๋ผ, Compose์์๋ ํจ์ ํ๋๊ฐ UI์ ๊ตฌ์ฑ ์์(์ปดํฌ๋ํธ)๊ฐ ๋ฉ๋๋ค.
name
๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ๊ทธ์ ๋ฐ๋ผ Text()
๋ ์๋์ผ๋ก ๋ค์ ๊ทธ๋ ค์ง๋๋ค.
setContent {}
๋ธ๋ก์์ ์ปดํฌ์ ๋ธ ํจ์ ์คํ์ด ์์๋ฉ๋๋ค. var count by remember { mutableStateOf(0) }
Button(onClick = { count++ }) {
Text("Count: $count")
}
count
๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด,๐ ์ ์ฒด ํ๋ฉด์ ๋ค์ ๊ทธ๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ, ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ๋๋ํ๊ฒ ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
ํค์๋ | ์ค๋ช |
---|---|
remember | ์ฌ๊ตฌ์ฑ๋ ๋ ๊ฐ์ ์ ์งํด์ค๋๋ค. (๋ก์ปฌ ์บ์์ฒ๋ผ ์๋) |
mutableStateOf | Compose์์ ์ํ ๋ณํ๋ฅผ ๊ฐ์งํ ์ ์๋๋ก ๋ง๋ญ๋๋ค. |
by remember { mutableStateOf() } | ์ํ๊ฐ์ ์ ์ธํ๋ฉด์, ๋ณ๊ฒฝ ์ ์ฌ๊ตฌ์ฑ์ ์ ๋ํฉ๋๋ค. |
var name by remember { mutableStateOf("world") }
Text("Hello, $name")
์ด ๊ฒฝ์ฐ name
๊ฐ์ด ๋ฐ๋๋ฉด Text()
๊ฐ ์๋์ผ๋ก ๋ค์ ์คํ๋์ด ์ต์ UI๋ก ์
๋ฐ์ดํธ๋ฉ๋๋ค.
๊ธฐ์กด Android View ์์คํ | Jetpack Compose |
---|---|
XML + findViewById | Kotlin ์ฝ๋๋ก UI ์ ์ธ |
์ํ ๋ณ๊ฒฝ โ ์๋ UI ์ ๋ฐ์ดํธ | ์ํ ๋ณ๊ฒฝ โ ์๋ Recomposition |
ViewGroup๋ก UI ํธ๋ฆฌ ๊ตฌ์ฑ | ํจ์ ํธ์ถ๋ก UI ๊ตฌ์ฑ |
๋ช ๋ นํ ๋ฐฉ์ | ์ ์ธํ ๋ฐฉ์ |
@Composable
fun Screen() {
var isLoggedIn by remember { mutableStateOf(false) }
if (isLoggedIn) {
Text("Welcome!")
} else {
Button(onClick = { isLoggedIn = true }) {
Text("Login")
}
}
}
์ ์ฝ๋์์ isLoggedIn
์ด true
๋ก ๋ฐ๋๋ฉด,
Button
์ด ์ฌ๋ผ์ง๊ณ Text("Welcome!")
๊ฐ ๋ํ๋ฉ๋๋ค.
๐ ์ ์ฒด UI๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ, ๋ณํ๊ฐ ์๊ธด ์์ญ๋ง ์ค๋งํธํ๊ฒ ์ ๋ฐ์ดํธ๋์ฃ .
์ฌ๊ธฐ๊น์ง Jetpack Compose์ ์๋ ๋ฐฉ์๊ณผ @Composable
, ์ํ, Recomposition์ ๊ด๊ณ๋ฅผ ๊ฐ๋จํ ์ ๋ฆฌํด๋ณด์์ต๋๋ค.
๋์์ด ๋์
จ๋ค๋ฉด ์ข๊ฒ ์ต๋๋ค! ๋ค์ ๊ธ์์๋ LazyColumn์ด๋ Recomposition, Composition phase์ ๋ํด ๋ ์์๋ณด๊ฒ ์ต๋๋ค!