๐ ํ๋ก์ ํธ ๊ตฌ์กฐ
- MainActivity.java: ๋ฉ์ธ ์กํฐ๋นํฐ (์ฑ์ ํต์ฌ ๋ก์ง)
- activity_main.xml: UI ๋ ์ด์์ ํ์ผ
- AndroidManifest.xml: ์ฑ ์ค์ ๋ฐ ๊ถํ
- build.gradle: ๋น๋ ์ค์ ๋ฐ ์์กด์ฑ
- strings.xml: ๋ฌธ์์ด ๋ฆฌ์์ค
- README.md: ํ๋ก์ ํธ ๋ฌธ์
๐ง ์ถ๊ฐ๋ ์ค์ ํ์ผ๋ค:
- gradle.properties: Gradle ์ ์ญ ์ค์
- local.properties: SDK ๊ฒฝ๋ก ์ค์
- gradle/wrapper/: Gradle ๋ํผ ์ค์
- gradlew & gradlew.bat: Gradle ์คํ ์คํฌ๋ฆฝํธ
- proguard-rules.pro: ์ฝ๋ ๋๋ ํ ์ค์
- .idea/runConfigurations/app.xml: Android Studio ์คํ ํ๊ฒฝ ์ค์
๐ Android Studio์์ ์คํํ๋ ๋ฐฉ๋ฒ:
- ํ๋ก์ ํธ ์ด๊ธฐ:
- Android Studio ์คํ
- “Open” ํด๋ฆญ
/Users/junhoha/bigdata/HelloWorldAndroid
ํด๋ ์ ํ
- ์ฒซ ์คํ ์ ์ค์ :
- Gradle ๋๊ธฐํ๊ฐ ์๋์ผ๋ก ์์๋ฉ๋๋ค
- ํ์ํ SDK๊ฐ ์๋์ผ๋ก ๋ค์ด๋ก๋๋ฉ๋๋ค
- ์ฑ ์คํ:
- ์๋จ ํด๋ฐ์์ “app” ์คํ ์ค์ ์ด ์ ํ๋์ด ์๋์ง ํ์ธ
- ๋
น์ ์ฌ์ ๋ฒํผ ํด๋ฆญ ๋๋
Shift + F10
- ๋๋ฐ์ด์ค/์๋ฎฌ๋ ์ดํฐ ์ ํํ์ฌ ์คํ
๐ฑ ์คํ ๊ฒฐ๊ณผ:
์ฑ์ด ์คํ๋๋ฉด ํ๋ฉด ์ค์์ “Hello World! ์๋ ํ์ธ์!” ๋ฉ์์ง๊ฐ ๋นจ๊ฐ์์ผ๋ก ํ์๋๊ณ , ๊ทธ ์๋์ “์ฒซ ๋ฒ์งธ ์๋๋ก์ด๋ ์ฑ์ ๋๋ค!” ๋ฉ์์ง๊ฐ ํ๋์์ผ๋ก ํ์๋ฉ๋๋ค.
๐ฏ Kotlin ๋ณํ
๐ฑ ๋ณ๊ฒฝ๋ ์ฃผ์ ์ฌํญ๋ค
1. MainActivity.kt (Kotlin ๋ณํ)
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Kotlin์ val ํค์๋ ์ฌ์ฉ
val textView = findViewById<TextView>(R.id.hello_text)
textView.text = "Hello World! ์๋
ํ์ธ์!"
}
}
Java โ Kotlin ๋ณํ ํฌ์ธํธ:
public class
โclass
(Kotlin์ ๊ธฐ๋ณธ์ด public)extends
โ:
(์์ ๋ฌธ๋ฒ)findViewById()
โfindViewById<TextView>()
(์ ๋ค๋ฆญ ํ์ ๋ช ์)TextView textView
โval textView
(๋ถ๋ณ ๋ณ์).setText()
โ.text =
(ํ๋กํผํฐ ์ ๊ทผ)
2. build.gradle (์ฑ ๋ ๋ฒจ) – Kotlin ์ง์ ์ถ๊ฐ
apply plugin: 'org.jetbrains.kotlin.android' // Kotlin ํ๋ฌ๊ทธ์ธ ์ถ๊ฐ
kotlinOptions {
jvmTarget = '1.8' // Kotlin JVM ํ๊ฒ ์ค์
}
dependencies {
implementation 'androidx.core:core-ktx:1.16.0' // Kotlin ํ์ฅ ํจ์
}
3. build.gradle (ํ๋ก์ ํธ ๋ ๋ฒจ) – Kotlin ๋น๋ ์ค์
buildscript {
ext {
kotlin_version = '2.1.21' // ์ต์ Kotlin ๋ฒ์
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
4. ์ ๋ฐ์ดํธ๋ ๋ฒ์ ๋ค
- compileSdk: 33 โ 36 (์ต์ Android API)
- targetSdk: 33 โ 36
- Kotlin: 2.1.21 (์ต์ ๋ฒ์ )
- Gradle ํ๋ฌ๊ทธ์ธ: 8.10.0 (์ต์ ๋ฒ์ )
๐ Kotlin์ ์ฅ์ ๋ค์ด ์ ์ฉ๋ ๋ถ๋ถ
- ๊ฐ๊ฒฐํ ๋ฌธ๋ฒ: Java ๋๋น ๋ ์ ์ ์ฝ๋๋ก ๋์ผํ ๊ธฐ๋ฅ
- Null Safety: Kotlin์ ํ์ ์์คํ ์ผ๋ก ๋ ์์ ํ ์ฝ๋
- ํ์ฅ ํจ์:
core-ktx
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก Android ๊ฐ๋ฐ ํธ์์ฑ ์ฆ๋ - ํ๋กํผํฐ ์ ๊ทผ:
.text =
๊ฐ์ ์ง๊ด์ ์ธ ํ๋กํผํฐ ์ค์
๐ ํ์ฌ ์ํ
- โ Java โ Kotlin ์์ ๋ณํ ์๋ฃ
- โ Kotlin ํ๋ฌ๊ทธ์ธ ๋ฐ ์์กด์ฑ ์ค์ ์๋ฃ
- โ ์ต์ Android API ๋ ๋ฒจ ์ ์ฉ
- โ ๋น๋ ์ค์ ์ต์ ํ ์๋ฃ
โ Gradle ๋น๋ ์๋ฌ ํด๊ฒฐ ์๋ฃ!
๋ฐ์ํ๋ repository ์ถฉ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. ์ฃผ์ ์์ ์ฌํญ:
๐ง ํด๊ฒฐํ ๋ฌธ์ ๋ค:
- Repository ์ค์ ์ถฉ๋:
settings.gradle
์์dependencyResolutionManagement
์ ๊ฑฐ - Build ์คํฌ๋ฆฝํธ ํธํ์ฑ: ์ต์ ํ๋ฌ๊ทธ์ธ ์์คํ
๋์ ์ ํต์ ์ธ
buildscript
๋ฐฉ์ ์ฌ์ฉ - ์ฑ ๋งค๋ํ์คํธ: ์ต์ Android ํ์ค์ ๋ง๊ฒ ์ ๋ฐ์ดํธ
- ํ ๋ง ๋ฐ ๋ฆฌ์์ค: Material Design ํ ๋ง์ ํ์ ๋ฆฌ์์ค ํ์ผ ์ถ๊ฐ
๐ฑ ์์ ๋ ํต์ฌ ํ์ผ๋ค:
- settings.gradle: Repository ์ถฉ๋ ํด๊ฒฐ
- build.gradle (ํ๋ก์ ํธ): buildscript ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ
- app/build.gradle: apply plugin ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ
- AndroidManifest.xml: ์ต์ ํ์ค ์ ์ฉ
- ํ ๋ง ํ์ผ๋ค: Material Design ํ ๋ง ์ถ๊ฐ
- MainActivity.java: AppCompatActivity ์ฌ์ฉ
๐ ์ด์ Android Studio์์:
- ํ๋ก์ ํธ ์ด๊ธฐ: HelloWorldAndroid ํด๋ ์ ํ
- Gradle ๋๊ธฐํ: ์๋์ผ๋ก ์งํ๋จ (๋ ์ด์ ์๋ฌ ์์)
- ์ฑ ์คํ: ๋ น์ Run ๋ฒํผ์ผ๋ก ์คํ ๊ฐ๋ฅ
-> AndroidStudio ์์ ์๋ ๋ณํ ์ง์๋จ.
๋ต๊ธ ๋จ๊ธฐ๊ธฐ