๋ชฉ์ฐจ
Jetpack Compose๋ Android UI๋ฅผ ๋น๋ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ต์ ํดํท์ด๋ค.
Compose๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ UI์์๋ฅผ ๋ด๋ณด๋ด๋ ํจ์์ธ Composable ํจ์๋ฅผ ์ ์ํ์ฌ UI๋ฅผ ๋น๋ํ ์ ์๋ค.
compoable ํจ์๋ ํญ์ @Composable ์ฃผ์์ด ์์ด์ผ ํ๋ค.
์ด ์ฃผ์์ ํตํด ์ด ํจ์๊ฐ ๋ฐ์ดํฐ๋ฅผ UI๋ก ๋ณํํ๊ฒ ๋์ด ์๋ค๋ ๊ฒ์ Compose ์ปดํ์ผ๋ฌ์ ์๋ฆฐ๋ค.
์ปดํ์ผ๋ฌ๋? ์์ฑํ ์ฝ๋๋ฅผ ํ ์ค์ฉ ๋ณด๊ณ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋ ๋ด์ฉ(๊ธฐ๊ณ์ด)๋ก ๋ณํํ๋ ํน์ ํ๋ก๊ทธ๋จ
compoable ํจ์
- ๋งค๊ฐ๋ณ์๋ฅผ ํ์ฉํ์ฌ ์ฑ ๋ก์ง์ด UI๋ฅผ ์ค๋ช ํ๊ฑฐ๋ ์์ ํ ์ ์๊ฒ ํด์ค๋ค
@Composable
fun Greeting(name: String) {
Text(text = "Hello $name!")
}
์์๋ UI์์๊ฐ String์ ํ์ฉํ๋ฏ๋ก ์ฌ์ฉ์์๊ฒ ์ด๋ฆ์ผ๋ก ์ธ์ฌํ ์ ์๋ค.
- ํจ์๋ ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์๋๋ค. UI๋ฅผ ๋ด๋ณด๋ด๋ composable ํจ์๋ UI์์๋ฅผ ๊ตฌ์ฑํ๋ ๋์ ์ํ๋ ํ๋ฉด ์ํ๋ฅผ ๊ธฐ์ ํ๋ฏ๋ก ๋ฐํํ ๋ด์ฉ์ด ์๋ค. ์ฆ composable ํจ์๋ UI๋ฅผ ๊ธฐ์ ํ๊ธฐ๋ง ํ๋ฉฐ UI๋ฅผ ๊ตฌ์ฑํ๊ฑฐ๋ ๋ง๋ค์ง๋ ์์ผ๋ฏ๋ก ๋ฐํํ ํญ๋ชฉ์ด ์๋ค.
@Composable
fun Greeting(name: String) {
Text(text = "Hello $name!")
}
@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
BirthdayCardTheme {
Greeting("Android")
}
}
composable ํจ์๋ ๋ค๋ฅธ composable ํจ์๋ฅผ ํธ์ถํ ์ ์๋ค.
composable ํจ์์ ์ด๋ฆ : ํ์ค์นผ ํ๊ธฐ๋ฒ : ๋ณตํฉ์ด์์ ๊ฐ ๋จ์ด์ ์ฒซ ๊ธ์๋ฅผ ๋๋ฌธ์๋ก ํ๊ธฐ (vs ์นด๋ฉ ํ๊ธฐ๋ฒ: ์ฒซ ๋ฒ์งธ ๋จ์ด๋ ๋๋ฌธ์๋ก ์ฐ์ง ์์)
Design์ฐฝ
composable ํจ์๋ ํจ์๋ฅผ ๋ฏธ๋ฆฌ ๋ณผ ์ ์๋๋ก ๋งค๊ฐ๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํด์ผํ๋ค.
Greeting () ํจ์๋ฅผ ์ง์ ๋ฏธ๋ฆฌ ๋ณผ ์ ๋ ์๋ค! ->>>>>>>>>. ์์ด?
์ ์ ํ ๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํด์ Greeting() ํจ์๋ฅผ ํธ์ถํ๋ ๋ค๋ฅธ ํจ์๋ฅผ ์ถ๊ฐํด์ผํ๋ค.
@Preview(showBackground = true)
@Composable
fun BirthdayCardPreview() {
BirthdayCardTheme {
Greeting("Android")
}
}
[์ค์ต ]
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.example.birthdaycard.ui.theme.BirthdayCardTheme
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
BirthdayCardTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colors.background
) {
}
}
}
}
}
@Composable
fun BirthdayGreetingWithText(message: String) {
Text(
text = message
)
}
@Preview(showBackground = true)
@Composable
fun BirthdayCardTPreview() {
BirthdayCardTheme {
BirthdayGreetingWithText(message = "Happy Birthday sunghyeon!")
}
}
๊ธ๊ผด ํฌ๊ธฐ ๋ณ๊ฒฝํ๊ธฐ
sp๋ ๊ธ๊ผด ํฌ๊ธฐ์ ์ธก์ ๋จ์์ด๋ค. Android์ฑ ๋ด์ UI์์๋ ๋ ๊ฐ์ง ์ธก์ ๋จ์๋ฅผ ์ฌ์ฉํ๋๋ฐ
1) dp : ๋ ์ด์์์ ์ฌ์ฉ
2) sp : dp๋จ์์ ํฌ๊ธฐ๊ฐ ๋์ผํ์ง๋ง, ์ฌ์ฉ์๊ฐ ํด๋์ ํ ์ค์ ์์ ์ ํํ ์ ํธํ๋ ํ ์คํธ ํฌ๊ธฐ์ ๋ฐ๋ผ ํฌ๊ธฐ๊ฐ ์กฐ์ ๋๋ค.
๋ค๋ฅธ ํ ์คํธ ์์ ์ถ๊ฐํ๊ธฐ
Text( ) ์ถ๊ฐ
9. ํ๊ณผ ์ด์ ํ ์คํธ ์์ ์ ๋ ฌ
UI ๊ณ์ธต ๊ตฌ์กฐ
UI ๊ณ์ธต ๊ตฌ์กฐ๋ ํฌํจ์ ๊ธฐ๋ฐํ๋ค. ํ ๊ตฌ์ฑ ์์์ ํ๋ ์ด์์ ๊ตฌ์ฑ ์์๋ฅผ ํฌํจํ ์ ์์ผ๋ฉฐ ์์ ์์ ๋ฐ ํ์ ์์๋ผ๋ ์ฉ์ด๊ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
context๋ ์์ UI ์์๊ฐ ํ์ UI ์์๋ฅผ ํฌํจํ๋ ๊ฒ ,, ์ด ํ์ UI ์์๋ ํ์ UI์์๋ฅผ ์ฐจ๋ก๋ก ํฌํจํ ์ ์๋ค.
์ด ์น์ ์์ ์์ UI ์์ ์ญํ ์ ํ ์ ์๋ ์ด , ํ , box composable์ ๊ดํด ์์๋ณด์
Compose์ ์ธ ๊ฐ์ง ๊ธฐ๋ณธ ํ์ค ๋ ์ด์์ ์์๋ Column , Row, Box ์ปดํฌ์ ๋ธ์ด๋ค.
Column, Row, Box๋ Composable ์ฝํ ์ธ ๋ฅผ ์ธ์๋ก ์ฌ์ฉํ๋ composable ํจ์ ์ด๋ฏ๋ก ์ด๋ฌํ ๋ ์ด์์ ์์ ๋ด์ ํญ๋ชฉ์ ๋ฐฐ์น ํ ์ ์๋ค.
Row ์ปดํฌ์ ๋ธ ๋ด์ ๊ฐ ํ์ ์์๋ ํ ํ์ ๊ฐ๋ก๋ก ๋๋ํ ๋ฐฐ์น๋๋ค.
Row {
Text (" First " )
Text (" Second " )
}
ํํ ๋๋ค ๋ฌธ๋ฒ -> ???????????
Composable ํจ์ Row ์ ๊ดํธ ๋ผ์ ์ค๊ดํธ๊ฐ ์ฌ์ฉ๋์๋ค. ์์ ๋ณด๋ฉด... ์ด๋ฅผ ํํ ๋๋ค ๋ฌธ๋ฒ์ด๋ผ๊ณ ํ๋ค.
Kotlin์ ๋ง์ง๋ง ๋งค๊ฐ๋ณ์๊ฐ ํจ์์ผ ๋ ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ํจ์์ ์ ๋ฌํ๋ ํน์ํ ๋ฌธ๋ฒ์ ์ ๊ณตํ๋ค.
ํจ์๋ฅผ ์ด๋ฌํ ๋งค๊ฐ ๋ณ์๋ก ์ ๋ฌํ๋ ค๋ฉด ํํ ๋๋ค ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
ํจ์๋ฅผ ๊ดํธ ์์ ํจ์ ์ด๋ฆ๊ณผ ํจ๊ป ๋ฃ๋ ๋์ ํจ์ ์ด๋ฆ ๋ค์ ๊ดํธ๋ฅผ ๋ฃ๋๋ค.
์์ > ๊ตฌ์ฑ๊ฐ๋ฅํ ํจ์ Row() ์ ๋ง์ง๋ง ๋งค๊ฐ๋ณ์๋ ํ์ UI์์๋ฅผ ๋ด๋ณด๋ด๋ ํจ์์ธ content ๋งค๊ฐ๋ณ์์ด๋ค.
ํ ์คํธ ์์ ์ธ ๊ฐ๊ฐ ํฌํจ๋ ํ์ ๋ง๋ ๋ค๊ณ ๊ฐ์
Row(
content = {
Text("Some text")
Text("Some more text")
Text("Last text")
}
)
content ๋งค๊ฐ๋ณ์๋ ํจ์ ์๋ช ์ ๋ง์ง๋ง ๋งค๊ฐ๋ณ์์ด๋ฉฐ ๋๋ค ํํ์์ผ๋ก ๊ฐ์ ์ ๋ฌํ๋ฏ๋ก
๋ค์๊ณผ ๊ฐ์ด content ๋งค๊ฐ ๋ณ์์ ๊ดํธ๋ฅผ ์ญ์ ๊ฐ๋ฅ
Row {
Text("Some text")
Text("Some more text")
Text("Last text")
}
ํ๋์ ํ์ ํ ์คํธ ์์ ์ ๋ ฌ
ํ ์คํธ ์์๊ฐ ๊ฒน์น๋ ๊ฒ์ ํผํ๊ธฐ ์ํด ์ฑ์ ํ ์คํธ ์์๋ฅผ ํ ํ์ ์ ๋ ฌํฉ๋๋ค.
ํ๋์ ์ด์ ํ ์คํธ ์์ ์ ๋ ฌ
10. ๊ธฐ๊ธฐ์ ํ์ํ๊ธฐ
MainActivity.kt ํ์ผ์์ onCreate ํจ์๋ก ์คํฌ๋กค
Surface ๋ธ๋ก์์ BirthdayGreetingWithText() ํจ์๋ฅผ ํธ์ถํ๋ค.
BirthdayGreetingWithText() ํจ์, ์์ผ ์ถํ ์ธ์ฌ๋ง ๋ฐ ์๋ช ใ ๋ฅด ์ ๋ฌ
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
BirthdayCardTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colors.background
) {
BirthdayGreetingWithText(message = "Happy Birthday hyeon!" , " - from = zu")
}
}
}
}
}
12. ๊ฒฐ๋ก
์์ฝ
- Jetpack Compose๋ Android UI๋ฅผ ๋น๋ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ต์ ๋๊ตฌ ํคํธ์ด๋ค.
Jetpack Compose๋ ๋ ์ ์ ์์ ์ฝ๋ , ๊ฐ๋ ฅํ ๋๊ตฌ, ์ง๊ด์ ์ธ Kotlin API๋ก Android ์์์ UI ๊ฐ๋ฐ์ ๊ฐ์ํํ๊ณ ๊ฐ์ํ๋ค.
- ์ฑ์ผ ์ฌ์ฉ์ ์ธํฐํ์ด์ค (UI) ๋ ํ๋ฉด์ ํ์๋๋ ํ ์คํธ, ์ด๋ฏธ์ง, ๋ฒํผ, ๊ธฐํ ์ฌ๋ฌ ์ ํ์ ์์์ด๋ค
- composable ํจ์๋ Compose์ ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์์ด๋ค. UI์ ์ผ๋ถ๋ฅผ ์ค๋ช ํ๋ ํจ์์ด๋ค.
- composable ํจ์๋ @Composable ์ฃผ์์ผ๋ก ์ฃผ์์ฒ๋ฆฌ๋๋ค. ์ด ์ฃผ์์ ์ด ํจ์๊ฐ ๋ฐ์ดํฐ๋ฅผ UI๋ก ๋ณํํ๋ค๋ ๊ฒ์ Compose ์ปดํ์ผ๋ฌ์ ์๋ ค์ค๋ค.
- Compose์ ์ธ ๊ฐ์ง ๊ธฐ๋ณธ ํ์ค ๋ ์ด์์ ์์๋ Column, Row, Box์ด๋ค.
์ด๋ฌํ ์์๋ ์ปดํฌ์ ๋ธ ์ฝํ ์ธ ๋ฅผ ์ฌ์ฉํ๋ composable ํจ์์ด๋ฏ๋ก ๋ด๋ถ์ ํญ๋ชฉ์ ๋ฐฐ์นํ ์ ์๋ค.
'2023 ์๋๋ก์ด๋ > ์๋๋ก์ด๋ ์คํฐ๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
HappyBirthdayCard ์ฝ๋ (0) | 2022.12.24 |
---|---|
unit1- Android์ฑ์ ์ด๋ฏธ์ง ์ถ๊ฐ (0) | 2022.12.24 |
4.Compose ์ฌ๋ถ๋ฉด (0) | 2022.11.17 |
์ฐ์ต: Compose ๊ธฐ๋ณธ ์ฌํญ (0) | 2022.11.17 |
10. ์๋ฃจ์ ์ฝ๋ ๊ฐ์ ธ์ค๊ธฐ ~ 11. ๊ฒฐ๋ก (0) | 2022.11.16 |