1. ์์ํ๊ธฐ ์ ์
์ปดํจํฐ์ ์์ง Android ์คํ๋์ค๋ฅผ ์ค์นํ์ง ์์๋ค๋ฉด ์ค์นํฉ๋๋ค. ์ปดํจํฐ๊ฐ Android ์คํ๋์ค ์คํ์ ํ์ํ ์์คํ ์๊ตฌ์ฌํญ(๋ค์ด๋ก๋ ํ์ด์ง ํ๋จ ์ฐธ๊ณ )์ ์ถฉ์กฑํ๋์ง ํ์ธํฉ๋๋ค. ์ค์ ํ๋ก์ธ์ค์ ๊ดํ ์์ธํ ์๋ด๊ฐ ํ์ํ ๊ฒฝ์ฐ Android ์คํ๋์ค ๋ค์ด๋ก๋ ๋ฐ ์ค์น Codelab์ ์ฐธ๊ณ ํ์ธ์.
์ด Codelab์์๋ Android ์คํ๋์ค์์ ์ ๊ณตํ๋ ํ๋ก์ ํธ ํ ํ๋ฆฟ์ผ๋ก ์ฒซ ๋ฒ์งธ Android ์ฑ์ ๋ง๋ญ๋๋ค. Kotlin๊ณผ Jetpack Compose๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ์ ๋ง์ถค์ค์ ํฉ๋๋ค. Android ์คํ๋์ค๋ ์ ๋ฐ์ดํธ๋๊ณ ๋์ ๋ฐ๋ผ UI๋ ๋ณ๊ฒฝ๋๋ฏ๋ก Android ์คํ๋์ค๊ฐ ์ด Codelab์ ์คํฌ๋ฆฐ์ท๊ณผ ์ฝ๊ฐ ๋ค๋ฅด๊ฒ ํ์๋ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ์๊ฑด
- ๊ธฐ๋ณธ์ ์ธ Kotlin ์ง์
ํ์ํ ํญ๋ชฉ
- ์ต์ ๋ฒ์ ์ Android ์คํ๋์ค
ํ์ตํ ๋ด์ฉ
- Android ์คํ๋์ค๋ก Android ์ฑ์ ๋ง๋๋ ๋ฐฉ๋ฒ
- Android ์คํ๋์ค์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋๊ตฌ๋ก ์ฑ์ ์คํํ๋ ๋ฐฉ๋ฒ
- Kotlin์ผ๋ก ํ ์คํธ๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ
- Jetpack Compose๋ก ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ
- Jetpack Compose์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ก ์ฑ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ
๋น๋ํ ํญ๋ชฉ
- ์๊ฐ๋ฅผ ๋ง์ถค์ค์ ํ ์ ์๋ ์ฑ
์ด Codelab์ ์๋ฃํ๋ฉด ์ฑ์ ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค(์ด๋ฆ๋ง ๋ง์ถค์ค์ ๋จ).
ํ์ํ ํญ๋ชฉ
- Android ์คํ๋์ค๊ฐ ์ค์น๋ ์ปดํจํฐ
2. ํ ํ๋ฆฟ์ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ ๋ง๋ค๊ธฐ
์ด Codelab์์๋ Android ์คํ๋์ค์์ ์ ๊ณตํ๋ Empty Activity ํ๋ก์ ํธ ํ ํ๋ฆฟ์ ์ฌ์ฉํ์ฌ Android ์ฑ์ ๋ง๋ญ๋๋ค.
Android ์คํ๋์ค์์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
- Android ์คํ๋์ค ์์ด์ฝ์ ๋๋ธํด๋ฆญํ์ฌ Android ์คํ๋์ค๋ฅผ ์คํํฉ๋๋ค.
- Welcome to Android Studio ๋ํ์์์์ New Project๋ฅผ ํด๋ฆญํฉ๋๋ค.
Android ์คํ๋์ค์์ ์ ๊ณตํ๋ ํ ํ๋ฆฟ ๋ชฉ๋ก์ด ํ์๋ New Project ์ฐฝ์ด ์ด๋ฆฝ๋๋ค.
Android ์คํ๋์ค์์ ํ๋ก์ ํธ ํ ํ๋ฆฟ์ ํน์ ์ ํ์ ์ฑ์ ์ํ ์ฒญ์ฌ์ง์ ์ ๊ณตํ๋ Android ํ๋ก์ ํธ์ ๋๋ค. ํ ํ๋ฆฟ์ ํ๋ก์ ํธ์ ๊ตฌ์กฐ, ๊ทธ๋ฆฌ๊ณ Android ์คํ๋์ค์์ ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๋ ๋ฐ ํ์ํ ํ์ผ์ ๋ง๋ญ๋๋ค. ์ ํํ ํ ํ๋ฆฟ์์ ์์ ์ฝ๋๊ฐ ์ ๊ณต๋๋ฏ๋ก ๋ ๋น ๋ฅด๊ฒ ์งํํ ์ ์์ต๋๋ค.
- Phone and Tablet ํญ์ด ์ ํ๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
- Empty Activity ํ
ํ๋ฆฟ์ ํด๋ฆญํ์ฌ ํ๋ก์ ํธ์ ํ
ํ๋ฆฟ์ผ๋ก ์ ํํฉ๋๋ค. Empty Activity ํ
ํ๋ฆฟ์ Compose ์ฑ์ ๋น๋ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๊ฐ๋จํ ํ๋ก์ ํธ๋ฅผ ๋ง๋๋ ํ
ํ๋ฆฟ์
๋๋ค. ๋จ์ผ ํ๋ฉด์ด ์๊ณ
"Hello
Android!"
ํ ์คํธ๊ฐ ํ์๋ฉ๋๋ค. - ๋ค์์ ํด๋ฆญํฉ๋๋ค. New Project ๋ํ์์๊ฐ ์ด๋ฆฝ๋๋ค. ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ๋ ๋ช ๊ฐ์ง ํ๋๊ฐ ์์ต๋๋ค.
- ๋ค์๊ณผ ๊ฐ์ด ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
Name ํ๋๋ ํ๋ก์ ํธ์ ์ด๋ฆ์ ์ ๋ ฅํ๋ ๋ฐ ์ฌ์ฉํ๋ฉฐ ์ด Codelab์์๋ 'Greeting Card'๋ฅผ ์ ๋ ฅํฉ๋๋ค.
Package name ํ๋๋ ๊ทธ๋๋ก ๋ก๋๋ค. ์ด๋ ํ์ผ ๊ตฌ์กฐ์์ ํ์ผ์ด ๊ตฌ์ฑ๋๋ ๋ฐฉ์์
๋๋ค. ์ฌ๊ธฐ์ ํจํค์ง ์ด๋ฆ์ com.example.greetingcard
๊ฐ ๋ฉ๋๋ค.
Save location ํ๋๋ ๊ทธ๋๋ก ๋ก๋๋ค. ํ๋ก์ ํธ์ ๊ด๋ จ๋ ๋ชจ๋ ํ์ผ์ด ์ ์ฅ๋๋ ์์น๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์ปดํจํฐ์ ์ ์ฅ ์์น๋ฅผ ๊ธฐ๋กํด ํ์ผ์ ์ฐพ์ ์ ์๋๋ก ํฉ๋๋ค.
Minimum SDK ํ๋์ ๋ฉ๋ด์์ API 24: Android 7.0(Nougat)์ ์ ํํฉ๋๋ค. Minimum SDK๋ ์ฑ์ ์คํํ ์ ์๋ Android์ ์ต์ ๋ฒ์ ์ ๋ํ๋ ๋๋ค.
- ๋ง์นจ์ ํด๋ฆญํฉ๋๋ค. ๋ค์ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ผ๋, ์ฐจ๋ฅผ ํ ์ ๋์๊ณ ์๋ ์ข์ต๋๋ค. Android ์คํ๋์ค๊ฐ ์ค์ ๋๋ ๋์ ์งํ๋ฅ ํ์์ค๊ณผ ๋ฉ์์ง๋ฅผ ํตํด Android ์คํ๋์ค์์ ์์ง ํ๋ก์ ํธ๋ฅผ ์ค์ ํ๊ณ ์๋์ง ์ ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ํ์๋ ์ ์์ต๋๋ค.
ํ๋ก์ ํธ ์ค์ ์ด ๋ง๋ค์ด์ง๋ฉด ์ด์ ๊ฐ์ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
- Android ์คํ๋์ค์ ์๋ก์ด ๊ธฐ๋ฅ์ ๊ดํ ์ ๋ฐ์ดํธ๊ฐ ํฌํจ๋ What's New ์ฐฝ์ด ํ์๋ ์ ์์ต๋๋ค. ์ง๊ธ์ ๋ซ์ต๋๋ค.
- Android ์คํ๋์ค ์ค๋ฅธ์ชฝ ์๋จ์์ Split์ ํด๋ฆญํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ฝ๋์ ๋์์ธ์ ๋ชจ๋ ํ์ธํ ์ ์์ต๋๋ค. Code๋ฅผ ํด๋ฆญํ์ฌ ์ฝ๋๋ง ๋ณด๊ฑฐ๋ Design์ ํด๋ฆญํ์ฌ ๋์์ธ๋ง ๋ณผ ์๋ ์์ต๋๋ค.
Split์ ๋๋ฅด๋ฉด ๋ค์ ์ธ ์์ญ์ด ํ์๋ฉ๋๋ค.
- Project ๋ทฐ(1)๋ ํ๋ก์ ํธ์ ํ์ผ๊ณผ ํด๋๋ฅผ ๋ณด์ฌ์ค๋๋ค.
- Code ๋ทฐ(2)์์๋ ์ฝ๋๋ฅผ ์์ ํฉ๋๋ค.
- Design ๋ทฐ(3)์์๋ ์ฑ์ด ์ด๋ป๊ฒ ํ์๋๋์ง ๋ฏธ๋ฆฌ ๋ด ๋๋ค.
Design ๋ทฐ์๋ ๋ค์ ํ ์คํธ๊ฐ ์๋ ๋น ์ฐฝ์ด ํ์๋ฉ๋๋ค.
- Build & Refresh๋ฅผ ํด๋ฆญํฉ๋๋ค. ๋น๋ํ๋ ๋ฐ ๋ค์ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ง๋ง ์๋ฃ๋๋ฉด ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ 'Hello Android!'๋ผ๋ ํ ์คํธ ์์๊ฐ ํ์๋ฉ๋๋ค. ๋น Compose ํ๋์๋ ์ด ์ฑ์ ๋ง๋๋ ๋ฐ ํ์ํ ์ฝ๋๊ฐ ๋ชจ๋ ํฌํจ๋์ด ์์ต๋๋ค.
3. ํ๋ก์ ํธ ํ์ผ ์ฐพ๊ธฐ
์ด ์น์ ์์๋ ํ์ผ ๊ตฌ์กฐ๋ฅผ ์์ธํ ์์๋ณด๋ฉด์ Android ์คํ๋์ค๋ฅผ ๊ณ์ ์ดํด๋ด ๋๋ค.
- Android ์คํ๋์ค์์ Project ํญ์ ํ์ธํฉ๋๋ค. Project ํญ์ ํ๋ก์ ํธ์ ํ์ผ ๋ฐ ํด๋๊ฐ ํ์๋ฉ๋๋ค. ํ๋ก์ ํธ๋ฅผ ์ค์ ํ ๋ ํจํค์ง ์ด๋ฆ์ com.example.greetingcard์์ต๋๋ค. ์ด ํจํค์ง๋ฅผ Project ํญ์์ ๋ฐ๋ก ํ์ธํ ์ ์์ต๋๋ค. ํจํค์ง๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฝ๋๊ฐ ์๋ ํด๋์ ๋๋ค. Android ์คํ๋์ค๋ ํจํค์ง ์ธํธ๋ก ์ด๋ฃจ์ด์ง ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ก ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
- ํ์ํ ๊ฒฝ์ฐ Android ํญ์ ๋๋กญ๋ค์ด ๋ฉ๋ด์์ Android๋ฅผ ์ ํํฉ๋๋ค.
์ด๋ ์ฌ์ฉํ๋ ํ์ผ์ ํ์ค ๋ทฐ ๋ฐ ๊ตฌ์ฑ์ ๋๋ค. ํ๋ก์ ํธ์ ์ฝ๋๋ฅผ ์์ฑํ ๋ ์ ์ฉํฉ๋๋ค. ์ฑ์์ ์์ ํ ํ์ผ์ ์ฝ๊ฒ ์ก์ธ์คํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ์ง๋ง Finder ๋ Windows Explorer์ ๊ฐ์ ํ์ผ ๋ธ๋ผ์ฐ์ ์์ ํ์ผ์ ํ์ธํ๋ฉด ํ์ผ ๊ณ์ธต ๊ตฌ์กฐ๊ฐ ๋งค์ฐ ๋ค๋ฅด๊ฒ ๊ตฌ์ฑ๋ฉ๋๋ค.
- ๋๋กญ๋ค์ด ๋ฉ๋ด์์ Project Source Files๋ฅผ ์ ํํฉ๋๋ค. ์ด์ ํ์ผ ๋ธ๋ผ์ฐ์ ์ ๋์ผํ ๋ฐฉ์์ผ๋ก ํ์ผ์ ํ์ํ ์ ์์ต๋๋ค.
- ์ด์ ๋ทฐ๋ก ๋ค์ ์ ํํ๋ ค๋ฉด Android๋ฅผ ๋ค์ ์ ํํฉ๋๋ค. ์ด ๊ณผ์ ์์๋ Android ๋ทฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํ์ผ ๊ตฌ์กฐ๊ฐ ์ด์ํด ๋ณด์ด๋ ๊ฒฝ์ฐ ์ฌ์ ํ Android ๋ทฐ์ ์๋์ง ํ์ธํฉ๋๋ค.
4. ํ ์คํธ ์ ๋ฐ์ดํธ
Android ์คํ๋์ค๋ฅผ ์์๋ดค์ผ๋ฏ๋ก ์ด์ ์ธ์ฌ๋ง ์นด๋๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
MainActivity.kt
ํ์ผ์ Code ๋ทฐ๋ฅผ ํ์ธํฉ๋๋ค. ์ด ์ฝ๋์๋ ํนํ onCreate()
๋ฐ setContent()
ํจ์ ๋ฑ ์๋์ผ๋ก ์์ฑ๋ ํจ์๊ฐ ์์ต๋๋ค.
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
GreetingCardTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
Greeting("Android")
}
}
}
}
}
onCreate()
ํจ์๋ ์ด Android ์ฑ์ ์ง์
์ ์ด๋ฉฐ ๋ค๋ฅธ ํจ์๋ฅผ ํธ์ถํ์ฌ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋น๋ํฉ๋๋ค. Kotlin ํ๋ก๊ทธ๋จ์์๋ main()
ํจ์๊ฐ ์คํ์ ์ง์
์ /์์์ ์
๋๋ค. Android ์ฑ์์๋ onCreate()
ํจ์๊ฐ ์ด ์ญํ ์ ํฉ๋๋ค.
onCreate()
ํจ์ ๋ด setContent()
ํจ์๋ ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์๋ฅผ ํตํด ๋ ์ด์์์ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. @Composable
์ฃผ์์ผ๋ก ํ์๋ ๋ชจ๋ ํจ์๋ setContent()
ํจ์ ๋๋ ๋ค๋ฅธ ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์์์ ํธ์ถํ ์ ์์ต๋๋ค. ์ฃผ์์ Jetpack Compose์์ ์ด ํจ์๊ฐ UI๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ค๊ณ Kotlin ์ปดํ์ผ๋ฌ์ ์๋ฆฝ๋๋ค.
๋ค์์ผ๋ก, Greeting()
ํจ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. Greeting()
ํจ์๋ ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์์
๋๋ค. ์์๋ @Composable
์ฃผ์์ด ์์ต๋๋ค. ์ด ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์๋ ๋ช ๊ฐ์ง ์
๋ ฅ์ ๋ฐ์์ ํ๋ฉด์ ํ์๋๋ ๋ด์ฉ์ ์์ฑํฉ๋๋ค.
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
Text(
text = "Hello $name!",
modifier = modifier
)
}
์ด์ ์ ํจ์์ ๊ดํด ์์๋ดค์ง๋ง(๋ณต์ต์ด ํ์ํ ๊ฒฝ์ฐ Kotlin์์ ํจ์ ๋ง๋ค๊ธฐ ๋ฐ ์ฌ์ฉํ๊ธฐ codelab ์ฐธ๊ณ ) ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์์๋ ๋ช ๊ฐ์ง ์ฐจ์ด์ ์ด ์์ต๋๋ค.
- ํจ์ ์์
@Composable
์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
- ํจ์ ์์
@Composable
ํจ์ ์ด๋ฆ์ ๋๋ฌธ์๋ก ํ๊ธฐ๋ฉ๋๋ค.
@Composable
ํจ์๋ ์๋ฌด๊ฒ๋ ๋ฐํํ ์ ์์ต๋๋ค.
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
Text(
text = "Hello $name!",
modifier = modifier
)
}
ํ์ฌ Greeting()
ํจ์๋ ์ด๋ฆ์ ๊ฐ์ ธ์ ๊ทธ ์ฌ์ฉ์์๊ฒ Hello
๋ฅผ ํ์ํฉ๋๋ค.
- 'Hello'๋ผ๊ณ ํ๋ ๋์ ์๊ธฐ ์๊ฐ๋ฅผ ํ๋๋ก
Greeting()
ํจ์๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
Text(
text = "Hi, my name is $name!",
modifier = modifier
)
}
- Android๊ฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์๋์ผ๋ก ์ ๋ฐ์ดํธํ ๊ฒ์ ๋๋ค.
์ข์ต๋๋ค. ํ ์คํธ๋ฅผ ๋ณ๊ฒฝํ์ง๋ง ์ด๋ฆ์ด ์๋ Android๋ก ์๊ฐ๋ฉ๋๋ค. ์ด์ ์ด๋ฆ์ผ๋ก ์๊ฐํ๋๋ก ๋ง์ถค์ค์ ํฉ๋๋ค.
GreetingPreview()
ํจ์๋ ์ ์ฒด ์ฑ์ ๋น๋ํ์ง ์๊ณ ๋ ์ปดํฌ์ ๋ธ์ด ์ด๋ป๊ฒ ํ์๋๋์ง ํ์ธํ ์ ์๋ ๋ฉ์ง ๊ธฐ๋ฅ์
๋๋ค. ์ปดํฌ์ ๋ธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ฌ์ฉ ์ค์ ํ๋ ค๋ฉด @Composable
๋ฐ @Preview
๋ก ์ฃผ์ ์ฒ๋ฆฌํฉ๋๋ค. @Preview
์ฃผ์์ ์ด ์ปดํฌ์ ๋ธ์ ์ด ํ์ผ์ ๋์์ธ ๋ทฐ์ ํ์ํด์ผ ํ๋ค๊ณ Android ์คํ๋์ค์ ์๋ฆฝ๋๋ค.
@Preview
์ฃผ์์ด showBackground
๋ผ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. showBackground
๊ฐ true๋ก ์ค์ ๋๋ฉด ์ปดํฌ์ ๋ธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ ๋ฐฐ๊ฒฝ์ด ์ถ๊ฐ๋ฉ๋๋ค.
Android ์คํ๋์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํธ์ง๊ธฐ์ ๋ฐ์ ํ
๋ง๋ฅผ ์ฌ์ฉํ๋ฏ๋ก showBackground
=
true
์ showBackground
=
false
๊ฐ์ ์ฐจ์ด๋ฅผ ํ์ธํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ํ์ง๋ง ๋ค์ ์๋ ์ด๋ฌํ ์ฐจ์ด๊ฐ ์ด๋ป๊ฒ ํ์๋๋์ง ๋ณด์ฌ์ค๋๋ค. ์ด๋ฏธ์ง์ ํฐ์ ๋ฐฐ๊ฒฝ์ด true
๋ก ์ค์ ๋์ด ์์ต๋๋ค.
|
|
- ์ด๋ฆ์ผ๋ก
GreetingPreview()
ํจ์๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ง์ถค์ค์ ๋ ์ธ์ฌ๋ง ์นด๋๋ฅผ ๋ค์ ๋น๋ํ์ฌ ํ์ธํฉ๋๋ค.
@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
GreetingCardTheme {
Greeting("Meghan")
}
}
5. ๋ฐฐ๊ฒฝ ์์ ๋ณ๊ฒฝ
์ด์ ์๊ฐ ํ ์คํธ๊ฐ ํ์๋์ง๋ง ์ฝ๊ฐ ์ง๋ฃจํฉ๋๋ค. ์ด ์น์ ์์๋ ๋ฐฐ๊ฒฝ ์์์ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ ์์๋ด ๋๋ค.
์๊ฐ์ ๋ฐฐ๊ฒฝ ์์์ ๋ค๋ฅด๊ฒ ์ค์ ํ๋ ค๋ฉด ํ
์คํธ๋ฅผ Surface
๋ก ๋๋ฌ์ธ์ผ ํฉ๋๋ค. Surface
๋ ๋ฐฐ๊ฒฝ ์์์ด๋ ํ
๋๋ฆฌ์ ๊ฐ์ ๋ชจ์์ ๊ฐ๋ฐ์๊ฐ ๋ณ๊ฒฝํ ์ ์๋ UI ์น์
์ ๋ํ๋ด๋ ์ปจํ
์ด๋์
๋๋ค.
Surface
๋ก ํ ์คํธ๋ฅผ ๋๋ฌ์ธ๋ ค๋ฉด ํ ์คํธ ์ค์ ๊ฐ์กฐํ์ํ๊ณ Windows์ ๊ฒฝ์ฐAlt+Enter
, Mac์ ๊ฒฝ์ฐOption+Enter
๋ฅผ ๋๋ฅธ ํ Surround with widget์ ์ ํํฉ๋๋ค.
- Surround with Container๋ฅผ ์ ํํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ ์ปจํ
์ด๋๋ Box
์ด์ง๋ง ๋ค๋ฅธ ์ปจํ
์ด๋ ์ ํ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. Box
๋ ์ด์์์ ์ด ๊ณผ์ ์ ํ๋ฐ๋ถ์ ์์๋ด
๋๋ค.
Box
๋ฅผ ์ญ์ ํ๊ณ ๋์Surface()
๋ฅผ ์ ๋ ฅํฉ๋๋ค.
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
Surface() {
Text(
text = "Hi, my name is $name!",
modifier = modifier
)
}
}
Surface
์ปจํ ์ด๋์color
๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํ๊ณColor
๋ก ์ค์ ํฉ๋๋ค.
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
Surface(color = Color) {
Text(
text = "Hi, my name is $name!",
modifier = modifier
)
}
}
Color
๋ฅผ ์ ๋ ฅํ๋ฉด ๋นจ๊ฐ์์ผ๋ก ํ์๋๋ฉฐ ์ด๋ Android ์คํ๋์ค์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด import ๋ฌธ์ด ์๋ ํ์ผ์ ๋งจ ์๋ก ์คํฌ๋กคํ์ฌ ์ 3๊ฐ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ฉ๋๋ค.
- imports ๋ฌธ ๋ชฉ๋ก ์๋์ ๋ค์ ๋ฌธ์ ์ถ๊ฐํฉ๋๋ค.
import androidx.compose.ui.graphics.Color
์์ฑ๋ import ๋ฌธ ๋ชฉ๋ก์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.example.greetingcard.ui.theme.GreetingCardTheme
import androidx.compose.ui.graphics.Color
- ์ฝ๋์์ import ๋ฌธ์ ์ํ๋ฒณ ์์ผ๋ก ๊ณ์ ๋์ดํ๊ณ ์ฌ์ฉํ์ง ์๋ import ๋ฌธ์ ์ญ์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด ์๋จ ํด๋ฐ์์ Help๋ฅผ ๋๋ฅด๊ณ Optimize Imports๋ฅผ ์ ๋ ฅํ ๋ค์ Optimize Imports๋ฅผ ํด๋ฆญํฉ๋๋ค.
๋ฉ๋ด์์ Code > Optimize Imports๋ฅผ ์ ํํ์ฌ Optimize Imports๋ฅผ ๋ฐ๋ก ์ด ์๋ ์์ต๋๋ค. 'Help'์ ๊ฒ์ ์ต์ ์ ์ฌ์ฉํ๋ฉด ๋ฉ๋ด ํญ๋ชฉ์ ์์น๊ฐ ๊ธฐ์ต๋์ง ์์ ๋ ์์น๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
์์ฑ๋ import ๋ฌธ ๋ชฉ๋ก์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import com.example.greetingcard.ui.theme.GreetingCardTheme
- Surface ๊ดํธ ์์ ์ ๋ ฅํ Color๊ฐ ๋นจ๊ฐ์์์ ๋นจ๊ฐ์ ๋ฐ์ค๋ก ๋ฐ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด Color ๋ค์ ๋ง์นจํ๋ฅผ ์ถ๊ฐํฉ๋๋ค. ๋ค์ํ ์์ ์ต์ ์ ๋ณด์ฌ์ฃผ๋ ํ์ ์ด ํ์๋ฉ๋๋ค.
์ด๋ Android ์คํ๋์ค์ ๋ฉ์ง ๊ธฐ๋ฅ ์ค ํ๋๋ก, ์ง๋ฅ์ ์ด๋ฉฐ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋์์ ์ค๋๋ค. ์ฌ๊ธฐ์๋ ๊ฐ๋ฐ์๊ฐ ์์์ ์ง์ ํ๋ ค๊ณ ํ ๋ ์ด๋ฅผ ์ธ์ํ์ฌ ๋ค์ํ ์์์ ์ ์ํฉ๋๋ค.
- ๋ ธ์ถ ์์ญ ์์์ ์ ํํฉ๋๋ค. ์ด Codelab์์๋ Cyan์ ์ฌ์ฉํ์ง๋ง ์ข์ํ๋ ์์์ ์ ํํ ์ ์์ต๋๋ค.
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
Surface(color = Color.Cyan) {
Text(
text = "Hi, my name is $name!",
modifier = modifier
)
}
}
- ์ ๋ฐ์ดํธ๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ํ์ธํฉ๋๋ค.
6. ํจ๋ฉ ์ถ๊ฐ
ํ ์คํธ์ ๋ฐฐ๊ฒฝ ์์์ด ์๊ฒผ์ต๋๋ค. ์ด์ ํ ์คํธ ์ฃผ์์ ๊ณต๋ฐฑ(ํจ๋ฉ)์ ์ถ๊ฐํฉ๋๋ค.
Modifier
๋ ์ปดํฌ์ ๋ธ์ ๊ฐํํ๊ฑฐ๋ ์ฅ์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ฌ์ฉํ ์ ์๋ ํ ๊ฐ์ง ์์ ์๋ padding
์์ ์์ด๋ฉฐ ์ด๋ ์์ ์ฃผ์์ ๊ณต๋ฐฑ์ ์ถ๊ฐํฉ๋๋ค. ์ฌ๊ธฐ์๋ ํ
์คํธ ์ฃผ์์ ๊ณต๋ฐฑ์ ์ถ๊ฐํฉ๋๋ค. Modifier.padding()
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์คํํฉ๋๋ค.
๋ชจ๋ ์ปดํฌ์ ๋ธ์๋ Modifier
์ ํ์ ์ ํ์ ๋งค๊ฐ๋ณ์๊ฐ ์์ด์ผ ํฉ๋๋ค. ์ด๋ ์ฒซ ๋ฒ์งธ ์ ํ์ ๋งค๊ฐ๋ณ์์ฌ์ผ ํฉ๋๋ค.
modifier
์24.dp
ํฌ๊ธฐ๋ก ํจ๋ฉ์ ์ถ๊ฐํฉ๋๋ค.
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
Surface(color = Color.Cyan) {
Text(
text = "Hi, my name is $name!",
modifier = modifier.padding(24.dp)
)
}
}
- import ๋ฌธ ์น์ ์ ์๋์ import๋ฅผ ์ถ๊ฐํฉ๋๋ค.
Optimize Imports๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก ์ถ๊ฐํ import ๋ฌธ์ ์ํ๋ฒณ์์ผ๋ก ์ ๋ ฌํ์ธ์.
import androidx.compose.ui.unit.dp
import androidx.compose.foundation.layout.padding
์ถํํฉ๋๋ค. Compose์์ ์ฒซ ๋ฒ์งธ Android ์ฑ์ ๋น๋ํ์ต๋๋ค. ์ฝ์ง ์์ ์์ ์ธ๋ฐ ์ํ์ จ์ต๋๋ค. ์๊ฐ์ ๋ด์ด ๋ค์ํ ์์๊ณผ ํ ์คํธ๋ฅผ ์ ์ฉํด ๋ณด๋ฉด์ ์ ์ตํ์๊ธฐ ๋ฐ๋๋๋ค.
7. ์๋ฃจ์ ์ฝ๋ ๊ฒํ
๊ฒํ ๋ฅผ ์ํ ์ฝ๋ ์ค๋ํซ
package com.example.greetingcard
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.example.greetingcard.ui.theme.GreetingCardTheme
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
GreetingCardTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
Greeting("Android")
}
}
}
}
}
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
Surface(color = Color.Cyan) {
Text(
text = "Hi, my name is $name!",
modifier = modifier.padding(24.dp)
)
}
}
@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
GreetingCardTheme {
Greeting("Meghan")
}
}
8. ๊ฒฐ๋ก
Android ์คํ๋์ค์ ๊ดํด ์์๋ณด๊ณ Compose๋ฅผ ์ฌ์ฉํ์ฌ ์ฒซ Android ์ฑ์ ๋น๋ํ์ต๋๋ค. ์๊ณ ํ์ จ์ต๋๋ค.
์ด Codelab์ Compose ์ฌ์ฉ ์ ์์์ผ ํ๋ Android ๊ธฐ๋ณธ์ฌํญ ๊ณผ์ ์ ์ผ๋ถ์ ๋๋ค. ์๋ฎฌ๋ ์ดํฐ๋ ์ค์ ๊ธฐ๊ธฐ์์ ์ฑ์ ์คํํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๋ ค๋ฉด ์ด ๊ฐ๋ฐ์ ๊ณผ์ ์ ๋ค์ Codelab์ ํ์ธํ์ธ์.
์์ฝ
- ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ ค๋ฉด Android ์คํ๋์ค๋ฅผ ์ด๊ณ New Project > Empty Activity > Next๋ฅผ ํด๋ฆญํ์ฌ ํ๋ก์ ํธ ์ด๋ฆ์ ์ ๋ ฅํ ๋ค์ ์ค์ ์ ๊ตฌ์ฑํฉ๋๋ค.
- ์ฑ์ด ์ด๋ป๊ฒ ํ์๋๋์ง ํ์ธํ๋ ค๋ฉด Preview ์ฐฝ์ ์ฌ์ฉํฉ๋๋ค.
- ๊ตฌ์ฑ ๊ฐ๋ฅํ ํจ์๋ ์ผ๋ฐ ํจ์์ ๋น์ทํ์ง๋ง ๋ช ๊ฐ์ง ์ฐจ์ด์ ์ด ์์ต๋๋ค. ํจ์ ์ด๋ฆ์ ๋๋ฌธ์๋ก ํ๊ธฐ๋๋ฉฐ ํจ์ ์์
@Composable
์ฃผ์์ ์ถ๊ฐํ๊ณ@Composable
ํจ์๋ ์๋ฌด๊ฒ๋ ๋ฐํํ ์ ์์ต๋๋ค. Modifier
๋ ์ปดํฌ์ ๋ธ์ ๊ฐํํ๊ฑฐ๋ ์ฅ์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.