1 ์๋๋ก์ด๋ ์คํ๋์ค ์ค์น/์์
ํ์ผ ๋ค์ด๋ก๋ ๋ฐ ์ค์นํ๊ธฐ
- https://developer.android.com/studio?hl=ko ์์ ๋ค์ด๋ก๋ ๋ฐ ์ค์น
์๋๋ก์ด๋ ์คํ๋์ค ์ต์ํด์ง๊ธฐ
- ํด๋ฐ: ์ฑ ๋ฐ ์๋ฎฌ๋ ์ดํฐ ์คํ, SDK ๋ค์ด๋ก๋ ๋ฑ ๋ค์ํ ์์ ์ ์ํ
- ๋๊ตฌ์ฐฝ ๋ชจ์: ์๋๋ก์ด๋ ์คํ๋์ค ์ฐฝ์ ๋๋ ์ ์์ผ๋ฉฐ ๊ฐ๋ณ ๋๊ตฌ ์ฐฝ์ ํผ์น๊ฑฐ๋ ์ ์ ์ ์์
- ๋๊ตฌ ์ฐฝ: ์๋์ฐ์ ํ์๊ธฐ๋ ๋งฅ์ ํ์ธ๋์ฒ๋ผ ํ๋ก์ ํธ์ ํ์ํ ์์ค ํ์ผ, ์ค์ ํ์ผ, ์ด๋ฏธ์ง ํ์ผ ๋ฑ๊ณผ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ ์ ์์. ๋ํ ๋ก๊ทธ ๋ณด๊ธฐ, ๋ฒ์ ๊ด๋ฆฌ, ํฐ๋ฏธ๋ ์คํ ๋ฑ์ ํน์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๋๊ตฌ ์ฐฝ ์๋์ชฝ์ ํญ์ ํด๋ฆญํ๋ฉด ํด๋น ๋๊ตฌ๋ฅผ ์ด ์ ์๊ณ , ์ค๋ฅธ์ชฝ ์์ ๋ซ๊ธฐ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ฐฝ์ ๋ซ์ ์ ์์
- ํธ์ง๊ธฐ ์ฐฝ: ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์์ ํ ์ ์์ (ํ์ผ ์ ํ์ ๋ฐ๋ผ ํธ์ง๊ธฐ๊ฐ ๋ฐ๋ ์ ์์)
- ์ํ ํ์์ค: ํ๋ก์ ํธ์ ์๋๋ก์ด๋ ์คํ๋์ค์ ์ํ๋ฅผ ํ์ํ๋ฉฐ ๊ฒฝ๊ณ ๋๋ ๊ธฐํ ํ์ํ ๋ฉ์์ง๋ ํ์
์๋๋ก์ด๋ SDK ๊ธฐ๋ณธ ์ค์ ํ์ธํ๊ธฐ
- ์๋๋ก์ด๋ ์คํ๋์ค๋ ํธ์ง์ ํธํ๊ฒ ํด์ฃผ๋ ๋๊ตฌ์ผ ๋ฟ, ์ค์ ์ปดํ์ผ๋ฌ์ ๊ฐ์ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ชจ๋ SDK์ ์์
- ์๋๋ก์ด๋ ์คํ๋์ค๋ ์ด SDK๋ฅผ ์ฌ์ฉํด์ ์ต์ข ์ค์น ํ์ผ์ ๋ง๋ค์ด์ค
- (์๋์ฐ) File - Settings - Languages & Frameworks - Android SDK๋ฅผ ํด๋ฆญ
Android SDK Location์์ ์ค์น ๊ฒฝ๋ก๋ฅผ ํ์ธ ๊ฐ๋ฅ
SDK Platforms
- File - Settings - Languages & Frameworks - Android SDK - SDK Platforms ํญ
์์ค ์ฝ๋๋ฅผ ๋น๋ํ ๋ ์ฌ์ฉํ๋ ํ๋ซํผ์ด ๋ฒ์ ๋ณ๋ก ํ์๋ ๊ฒ์ ํ์ธ ๊ฐ๋ฅ - ์ปดํจํฐ์ ์ค์น๋ ํ๋ซํผ์ Status ๋ถ๋ถ์ด "Installed"๋ก ํ์๋์ด ์์ผ๋ฉฐ
"Not Installed"๋ก ํ์๋ ํ๋ซํผ ์ค ์ค์น๋ฅผ ์ํ๋ ํ๋ซํผ ์ด๋ฆ ์์ ์ฒดํฌ๋ฐ์ค๋ฅผ ์ฒดํฌํด์ ์ค์น ํญ๋ชฉ ์ ํ ๊ฐ๋ฅ
SDK Tools
- File - Settings - Languages & Frameworks - Android SDK - SDK Tools ํญ
์๋๋ก์ด๋์์ ์ฌ์ฉํ ์ ์๋ ๋๊ตฌ(์๋ฎฌ๋ ์ดํฐ, ๋๋ฒ๊ฑฐ ๋ฑ)์ ๋ชฉ๋ก์ ํ์ธ - Android SDK Build-Tools
: ๋ฆฌ์์ค ์์ด๋๋ฅผ ๊ฐ์ง๊ณ ์๋ R ํ์ผ์ ์์ฑํ๊ณ ์ค์น ํ์ผ์ธ APK ํ์ผ์ ์ต์ ํ ํ๋ ๋๊ตฌ
์๋ฐ ๋ฐ์ดํธ์ฝ๋(Java Bytecode)๋ฅผ ๋ฌ๋น ๋ฐ์ดํธ์ฝ๊ทธ(Dalvik Bytecode)๋ก ๋ณํํ๋ ๋๊ตฌ๋ ํฌํจ - Android Emulator
: ๊ฐ์์ ์ค๋งํธํฐ ํ๊ฒฝ์ผ๋ก ์ฑ์ ์ค์นํ๊ณ ํ ์คํธ - Android SDK Platform-Tools
: ์๋ฎฌ๋ ์ดํฐ์ ์ค๋งํธํฐ์ ์ฐ๊ฒฐํ๊ธฐ ์ํ ADB(Android Debug Bridge)๋ผ๋ ๋๊ตฌ์
์ฑ๋ฅ ๋ถ์ ๋๊ตฌ์ธ Systrace๊ฐ ์ ๊ณต - Intel x86 Emulator Accelerator(HAXM installer)
: ์๋ฎฌ๋ ์ดํฐ์ ์ฒ๋ฆฌ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํด์ฃผ๋ ํ๋์จ์ด ๊ฐ์๊ธฐ
์ค์น๋์ด ์์ง ์์ผ๋ฉด ์๋ฎฌ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์์ ์ ๋๋ก ๋๋ ค์ง ์ ์์
SDK Update Sites
- File - Settings - Appearance & Behavior - System Settings - Android SDK - SDK Update Sites ํญ
- ํ์ํ ๋๊ตฌ๋ฅผ ๋ค์ด๋ก๋ํ ์ ์๋ ์น ์ฌ์ดํธ ์ฃผ์๊ฐ ๋ฑ๋ก๋์ด ์์ผ๋ฉฐ, ๋ค๋ฅธ ์ฃผ์๋ฅผ ๋ฑ๋ก ๊ฐ๋ฅ
- ์์ ์ด ์์ผ๋ฉด Apply๋ฅผ ํด๋ฆญํ๊ณ ์์ผ๋ฉด OK๋ฅผ ํด๋ฆญํด์ ์ฐฝ์ ๋ซ์
ํ๋ก์ ํธ ๊ตฌ์กฐ ์ดํดํ๊ธฐ
- ํ๋ก์ ํธ(Project) : ์์ค ์ฝ๋์ ์ด๋ฏธ์ง, ์์ , ํ ์คํธ ํ์ผ ๋ฑ์ ๋ฆฌ์์ค๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ์ต์์ ๋๋ ํฐ๋ฆฌ
- ๋๋ถ๋ถ์ ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ์ ํ์์ ๋ฐ๋ผ ํ๋ก์ ํธ ๋ด๋ถ์ ์์ฑ๋๋ ์ค์ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ฌ๋ฐฐ์ดํด์ ๋ณด์ฌ์ฃผ๋๋ฐ,
์๋๋ก์ด๋ ์คํ๋์ค๋ ๋์ผํ ๊ธฐ๋ฅ์ ์ ๊ณต - ์๋๋ก์ด๋ ์คํ๋์ค์ ๋ณด์ด๋ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ ≠ ์ค์ ํ์๊ธฐ ์์ ํ์ผ ๊ตฌ์กฐ
∴ ํ์์ ๋ฐ๋ผ ์ค์ ๋๋ ํฐ๋ฆฌ ๋ทฐ(Project๋ทฐ), Android ๋ทฐ ์ ํํ๋ฉด์ ์ฌ์ฉ
Android ๋ทฐ์ ๊ตฌ์กฐ
- Android ๋ทฐ : ์๋๋ก์ด๋ ๊ฐ๋ฐ์ ํธํ๊ฒ ํ๊ธฐ ์ํด ์ฌ๋ฐฐ์นํ ๊ฐ์์ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ
- Project ๋ทฐ๋ณด๋ค ํจ์ฌ ๊ฐ๋จํ๋ฏ๋ก, ๋ณดํต ์์ ํ ๋๋ Android๋ก ๋ณด๋ ๊ฒ์ ์ถ์ฒ
- ํฌ๊ฒ app๊ณผ Gradle Scripts๋ก ๊ตฌ์ฑ
app์๋ ์ฝ๋ฉํ๋ฉด์ ์์ฑํ ๋ชจ๋ ํ์ผ์ด ์ ์ฅ๋๊ณ , Gradle Scripts์๋ ๋น๋์ ํ์ํ ์ค์ ์ ๋ณด๋ค์ด ์ ์ฅ - manifest: ์ค์น ๊ด๋ จ ์ ๋ณด ๋๋ ํฐ๋ฆฌ
kotlin+java: ์์ค ์ฝ๋ ๋๋ ํฐ๋ฆฌ
res: ์ด๋ฏธ์ง, ๋ ์ด์์, MP3 ๋ฑ์ ๋ฆฌ์์ค ๋๋ ํฐ๋ฆฌ
Gradle Scripts: ๋น๋ ๊ด๋ จ ์ค์ ์ ๋ณด ๋๋ ํฐ๋ฆฌ
Project ๋ทฐ์ ๊ตฌ์กฐ
- Project ๋ทฐ : ์ค์ ๋๋ ํฐ๋ฆฌ์ ๊ตฌ์กฐ
- ์ด๋ฏธ์ง๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๋ค์ํ ํ๋ฉด ํฌ๊ธฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์์ ๋ฑ ๋ฆฌ์์ค๋ฅผ ๋ณ๊ฒฝํ ๋ ์ถ์ฒ
- app: ์ฑ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ์์ค(์ฝ๋, ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ด๋ฏธ์ง ๋ฑ) ๋๋ ํฐ๋ฆฌ
src: ๋ด๊ฐ ๋ง๋ ์์ค(์ฝ๋, ๋ ์ด์์, ์ด๋ฏธ์ง ๋ฑ)๊ฐ ์๋ ๋๋ ํฐ๋ฆฌ
app>src>main>java: ์์ค ์ฝ๋๊ฐ ์๋ ๋๋ ํฐ๋ฆฌ(์์ง java๋ก ๋์ด ์์ต๋๋ค.)
res: ์ด๋ฏธ์ง, ๋ ์ด์์, MP3 ๋ฑ์ ๋ฆฌ์์ค ๋๋ ํฐ๋ฆฌ
AndroidManifest.xml: ์ค์น ์ ๋ณด ํ์ผ
build.gradle: ๋น๋ ์ ๋ณด ํ์ผ
2 ์ฑ์ ๋ง๋ค์ด ์คํํ๊ธฐ
์๋ฎฌ๋ ์ดํฐ ์์ฑ ๋ฐ ์คํํ๊ธฐ
- ์๋ฎฌ๋ ์ดํฐ : ํ ์์คํ ์์ ๋ค๋ฅธ ์์คํ ์ ๋ณต์ ํด์ ๋ณต์ ๋ ์์คํ ์ด ์๋ณธ ์์คํ ์ ๊ทธ๋๋ก ์ฌํํด์ฃผ๋ ๊ฒ(๊ฐ์ํ๊ฒฝ)
- ์๋๋ก์ด๋ ์คํ๋์ค์๋ ์๋ฎฌ๋ ์ดํฐ๊ฐ ์์ด์ ์ค๋งํธํฐ์ด ์์ด๋ ์์ฑํ ์ฝ๋๋ฅผ ํ ์คํธ ํ ์ ์์
- Device Manager - Create Device (+๋ฒํผ) - ์ํ๋ ๊ธฐ๊ธฐ ์ ํ - Android ๋ฒ์ ์ ํ - Finish
- ์ค์น๊ฐ ์๋ฃ๋๋ฉด ๋ชฉ๋ก์์ ์ฌ์ ๋ฒํผ์ผ๋ก ์คํ
์ค๋งํธํฐ ์ค์ ๋ฐ ์ฐ๊ฒฐํ๊ธฐ
- ์ค๋งํธํฐ์ ๊ฐ๋ฐ์ ์ต์ ํ์ฑํ (๋น๋ ๋ฒํธ ํด๋ฆญ ํ ํ์ฑํ)
- ๊ฐ๋ฐ์ ์ต์ ์ ๋ค์ด USB ๋๋ฒ๊น ํ์ฑํ, USB ์ผ์ด๋ธ์ ์ด์ฉํด ์ฐ๊ฒฐ ๋ค ๊ธฐ๊ธฐ ๋ชฉ๋ก์์ ์ ํํ์ฌ ์คํ
์ฑ ๋ง๋ค์ด ์คํํ๊ธฐ
์ฑ์ ๋ง๋ค์ด ์คํํ๋ ๊ณผ์ (4๋จ๊ณ)
1. ํ๋ก์ ํธ ์์ฑํ๊ธฐ
2. ๋ ์ด์์ ํธ์งํ๊ธฐ
3. ์์ค ์ฝ๋ ์ฐ๊ฒฐํ๊ธฐ
4. ์ฑ ์คํํ๊ธฐ
1๋จ๊ณ: ํ๋ก์ ํธ ์์ฑํ๊ธฐ
- "New Project" - Empty Views Activity ํด๋ฆญ
- Name์๋ ์ํ๋ ํ๋ก์ ํธ ์ด๋ฆ, Package name์ ์๋ฌธ์๋ก, Language๋ Kotlin์ผ๋ก ์ค์ ํฉ๋๋ค.
Name: ํ๋ก์ ํธ๋ช
Package name: ํจํค์ง๋ช (ํจํค์ง๋ช ์ ์ ํ๋ฆฌ์ผ์ด์ ID์ด๋ฉฐ ๋์ค์ ๋ณ๊ฒฝํ ์ ์์, ๋ฐ๋์ ์๋ฌธ์)
Save location: ํ๋ก์ ํธ๋ฅผ ์ ์ฅํ ์์น
Language: ํ๋ก์ ํธ์ ์ฌ์ฉํ ์ธ์ด๋ฅผ ์ ํ
Minimum SDK: ์ต์ ์ง์ SDK. 98% ์ด์ ๋๋ ๊ฑฐ ์ ํํ๋ฉด ์ข์
โ
๐ก ํจํค์ง๋ช
(Package name)์ example์ ํฌํจํ ๊ฒฝ์ฐ ํ๋ ์ด ์คํ ์ด์ ์
๋ก๋ ํ ์ ์์
→ ๋ฐ๋์ com.ํ์ฌ๋ช
๋๋ ๋ณธ์ธ์ด๋ฆ.์ฑ์ด๋ฆ ํํ๋ก ์์ฑํด์ผ ํจ
2๋จ๊ณ: ๋ ์ด์์ ํธ์งํ๊ธฐ
- ๋ ์ด์์ : ํ ์คํธ๋ ์ด๋ฏธ์ง ๋ฑ์ ํ๋ฉด์ ๋ฐฐ์นํ ์ ์๋ ๋๊ตฌ
- ํ๋ก์ ํธ๊ฐ ์์ฑ ๋ค ๊ธฐ๋ณธํ๋ฉด์์ ํธ์ง๊ธฐ ์ฐฝ ์๋จ์ ๋ณด์ด๋ ํ์ผ๋ช ์ผ๋ก ๋ ํญ์ ์ ํํ๋ฉด ๋ ์ด์์ ํธ์ง๊ธฐ๋ก ์ด๋
- ํ์ผ์ ํ์ฅ์์ ๋ฐ๋ผ์ .kt ํ์ผ์ ์ฝ๋ ํธ์ง๊ธฐ๊ฐ ์ด๋ฆฌ๊ณ , .xml ํ์ผ์ ๋ ์ด์์ ํธ์ง๊ธฐ๊ฐ ์๋์ผ๋ก ์ด๋ฆผ
๐กํ๋ฉด์ ๊ทธ๋ ค์ฃผ๋ ํจ์ setContentView
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
๊ธฐ๋ณธ์ผ๋ก ์์ฑ๋ MainActivity์์ ๋ณด๋ฉด setContentView(R.layout.activity_main)๋ผ๋ ์ฝ๋๊ฐ ์์
์ด๋ '์ฝํ
์ธ ๋ฅผ ํ๋ฉด์ ํ์ํ๊ธฐ ์ํด์ res/layout ๋๋ ํฐ๋ฆฌ ์๋์ ์๋ activity_main.xml ํ์ผ์ ์ฌ์ฉํ๋ค'๋ผ๋ ์๋ฏธ
- activity_main.xml๋ฅผ ํด๋ฆญํ๋ฉด ํธ์ง๊ธฐ ์ฐฝ์ด ๋ ์ด์์์ ํธ์งํ ์ ์๋ ํํ๋ก ๋ฐ๋
- ์ฐ์ธก ์๋จ์ ์๋ ๋ชจ๋ ๋ฒํผ์ ํด๋ฆญ - [Code], [Split], [Design] ๋ชจ๋๋ก ๋ณ๊ฒฝ๋๋ฉด์ ๊ฐ๊ฐ์ ๋ชจ๋์์ ํธ์ง์ด ๊ฐ๋ฅ
- [Design] ๋ชจ๋๋ก ๋ค์ด๊ฐ ๋ค, ์ข์ธก ์๋จ์ ํ๋ ํธ(Palette) - ์ปค๋จผ(Common) - ๋ฒํผ(Button)์ ๋๋๊ทธ
ํ๋ฉด ์ค์์ 'Hello World!'๋ผ๋ ๊ธ์ ์๋์ ๊ฐ์ ธ๋ค ๋์
์ปจ์คํธ๋ ์ธํธ ํธ์ง๊ธฐ ์์ชฝ์ + ์์ด์ฝ์ ํด๋ฆญํ๋ฉด 'Hello World!'๊ฐ ์ฐ์ฌ ์๋ TextView์ ๋ฒํผ์ ๋ ์ด์์์ด ์ฐ๊ฒฐ๋จ
๐ก Constraint ํธ์ง๊ธฐ ์ซ์์ ์๋ฏธ
ํธ์ง๊ธฐ์์ ํด๋ฆญํ + ์์ ์ซ์๋ ํ์ฌ ์ฐ๊ฒฐ๋ ์์์์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ํ๋
ex) "44"๋ผ๋ ์ซ์๋ 44dp(Device independence Pixel)๋งํผ ๋จ์ด์ ธ ์๋ค๋ ์๋ฏธ
๐ก Constraint 3๊ฐ์ง ๋ชจ๋
- Wrap Content: ์์ ฏ ์์ชฝ์ ๋ด์ฉ๋ฌผ์ ํฌ๊ธฐ๋ฅผ ๋ง์ถค
- Fixed: ์ํ๋ ๊ฐ(์ ๊ทธ๋ฆผ์์ ์์ชฝ ์ปจ์คํธ๋ ์ธํธ ๊ฐ์ 44๋ก ์ค์ )์ ์ ๋ ฅํ์ฌ ๊ฐ๋ก ์ธ๋ก ์์ฑ ํ๋์ ์ ๋ ฅ๋ ํฌ๊ธฐ์ ๋ง๊ฒ ๊ฐ๋ก์ธ๋ก๋ฅผ ๊ณ ์
- Match Constraint: 0dp๋ก ์ค์ ํ์ฌ ํฌ๊ธฐ๋ฅผ ์ ์ฝ ์กฐ๊ฑด์ธ Constraint ์ฐ๊ฒฐ๋ถ์ ๋ง์ถฅ๋๋ค.
์ฝํ๋ฆฐ ์ฝ๋์ ๋ ์ด์์ ์ฐ๊ฒฐํ๊ธฐ
- ๋ทฐ(View) : ๋ ์ด์์์ด๋ ์ฌ์ฉ์์๊ฒ ๋ณด์ด๋ ๊ฒ๋ค์ ํต์นญ
- ๋ทฐ์์ ๋ฒํผ ๊ฐ์ ์์๋ฅผ ๋์์ํค๊ธฐ ์ํด์๋ ๋จผ์ ๋ทฐ์ ์์ค ์ฝ๋๋ฅผ ์ฐ๊ฒฐํด์ผ ํจ
- ์๋๋ก์ด๋๋ findViewById๋ผ๋ ํจ์๋ฅผ ์ ๊ณตํ๊ณ ์์ผ๋ฉฐ ์ด๋ฅผ ์กฐ๊ธ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด์ ์ฝํ๋ฆฐ์์๋ ์ฝํ๋ฆฐ ์ต์คํ
์
(Kotlin Extensions)์ด๋ผ๋ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํด ์์. ๊ทธ๋ฌ๋, ์ฝํ๋ฆฐ ์ต์คํ
์
์ ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ์ต์ ๋ฒ์ ์ ์๋๋ก์ด๋ ์คํ๋์ค์์๋ ์ฌ์ฉ์ ์ถ์ฒํ์ง ์์
- ์ฝํ๋ฆฐ์์๋ง ์ ๊ณตํ๋ฏ๋ก ์๋ฐ์์๋ ์ฌ์ฉํ ์ ์์
- ์ผ๋ถ ์ํฉ์์ ๋ทฐ๋ฅผ ์ฐพ์ ์ ์๋ ์ค๋ฅ๊ฐ ๋ฐ์
- ์ด๋์๋ ๋ทฐ๋ฅผ ํธ์ถํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ชป๋ ์ฐธ์กฐ๋ก ์ธํด ์ฑ์ด ๊ฐ์ ์ข ๋ฃ๋ ์ ์์
์๋ฅผ ๋ค์ด activity_main.xml๊ณผ fragment_sub.xml์์ ๋์ผํ๊ฒ button ์์ด๋๋ฅผ ์ฌ์ฉํ๋ฉด
์ค์๋ก ๋ค๋ฅธ XML์ ์์ด๋๋ฅผ ์ฐธ์กฐํ์ฌ ์ฑ์ด ๊ฐ์ ๋ก ์ข ๋ฃ๋ ์๋ ์์
- ๋ชจ๋ํ๋ฅผ ์ถ์ฒํ๊ณ ์๋๋ฐ ์ฝํ๋ฆฐ ์ต์คํ ์ ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ค๋ฅธ ์ฝ๋์์ ๋ทฐ์ ๋ํ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅ - ๋ฐ๋ผ์ ๋ทฐ ๋ฐ์ธ๋ฉ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ๋ทฐ์ ์ฝ๋๋ฅผ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ถ์ฒ
๐ก ๋ทฐ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
(1) build.gradle(Module: app) ํ์ผ์ viewBinding ์ค์ ์ ์ถ๊ฐ
(2) ํ์ผ ์๋จ์ ๋ํ๋๋ [Sync Now]๋ฅผ ํด๋ฆญํด์ ์ค์ ์ ์ ์ฉ
(3) activity_main.xml ๋ ์ด์์ ํ์ผ์ ์์ฑ
(4) viewBinding์ด ์ค์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ์๋๋ก์ด๋๊ฐ ๋ ์ด์์ ํ์ผ์ ๋ฐ์ธ๋ฉ์ผ๋ก ์์ฑ
- ์๋๋ณํ ๊ณต์: ๋ ์ด์์ ํ์ผ๋ช
(์ฒซ ๊ธ์์ ์ธ๋๋ฐ ๋ค์ ์๋ฌธ์ ๋๋ฌธ์๋ก ๋ณํ) + Binding
์) activity_main.xml = ActivityMainBinding
(5) MainActivity.kt ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑ (์์)
package com.example.myfirstapplication
โ
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.myfirstapplication.databinding.ActivityMainBinding
โ
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
}
}
[์ฃผ์ ๋ณ๊ฒฝ์ฌํญ]
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
- ๋ฐ์ธ๋ฉ ๋ณ์๋ฅผ ํตํด ๋ทฐ์ ๋ฏธ๋ฆฌ ์์ฑํด๋์๋ ๋ฒํผ์ id์ ์ ๊ทผํ ์ ์์
binding.button.setOnClickListener { }
package com.example.myfirstapplication
โ
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.myfirstapplication.databinding.ActivityMainBinding
โ
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.button.setOnClickListener {
}
}
}
- ๋ฒํผ์ id์ ๋ฆฌ์ค๋(Listener)๋ฅผ ์ค์
- ๋ฆฌ์ค๋์ ์ญํ ์ ๋ฒํผ์ ํด๋ฆญ ํ์ ๋ ๋ด๋ถ์ ์ฝ๋๋ฅผ ๋์์ํค๋ ๊ฒ
binding.button.setOnClickListener{
binding.textView.text = "Hello Kotlin!!!" // ๋ฒํผ์ ํด๋ฆญํ๋ฉด TextView์ ๋ฌธ๊ตฌ๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค.
}
- ๋ฒํผ์ ํด๋ฆญํ์์ ๋ TextView์ ๋ฌธ๊ตฌ๋ฅผ ๋ฐ๊พธ๋ ์ฝ๋
[์ต์ข ์ฝ๋]
package com.example.myfirstapplication
โ
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.myfirstapplication.databinding.ActivityMainBinding
โ
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
โ
binding.button.setOnClickListener {
binding.textView.text = "Hello Kotlin!!!"
}
}
}
์ฑ ์คํํ๊ธฐ
- ์๋ฎฌ๋ ์ดํฐ๋ฅผ ์ค์ ํ๊ณ , ํ๋ ์ด ๋ฒํผ์ ๋๋ฌ ์คํ
3 XML ๊ธฐ๋ณธ ๋ฌธ๋ฒ
- LinearLayout, FrameLayout, RelativeLayout ์ปดํฌ๋ํธ ํน์ง ๋ฐ ์์ฑ ์ดํด, ํ์ฉ
- ๋ ์ด์์, ์์ ฏ, ๋ทฐ ์ดํด
์กํฐ๋นํฐ์ ์ธํ ํธ
- ์ผ๋ฐ์ ์ผ๋ก ์๋๋ก์ด๋์ ํ ํ๋ฉด(ํ์ด์ง)์ ํ๋์ ์กํฐ๋นํฐ๋ก ๊ตฌ์ฑ
- ํ๋ฉด ์ ํ์ ์ธํ ํธ๋ก ๊ตฌํ
๋ฒํผ ์๋
// activity_main.xml
<Button
android:text="๋ค์ด๋ฒ ์ ์ํ๊ธฐ"
android:onClick="onButton1Clicked" />
<Button
android:text="์ ํ ๊ฑธ๊ธฐ"
android:onClick="onButton2Clicked" />
// MainActivity.kt
fun onButton1Clicked(View){
val myIntent = Intent(Intent.ACTION_VIEW, uri.parse("http://m.naver.com"))
startActivity(myIntent) // ์น๋ทฐ๋ฅผ ๋์ฐ๋ ์ธํ
ํธ๋ฅผ ๋ง๋ค์ด ํธ์ถ
}
fun onButton2Clicked(View){
val myIntent2 = Intent(Intent.ACTION_VIEW, uri.parse("tel:010-1234-5678"))
startActivity(myIntent2) // ์ ํ๋ฅผ ๊ฑฐ๋ ์ธํ
ํธ๋ฅผ ๋ง๋ค์ด ํธ์ถ
}
- ๋ฒํผ์ ๋ง๋ค๊ณ , onClick ์์ฑ์ ๊ฐ์ ์ํ๋ ํจ์๋ช ์ ์ฐ๋ฉด ๋ฒํผ์ ๋๋ ์ ๋ ํด๋น ํจ์๊ฐ ์คํ๋จ
- ์ฝํ๋ฆฐ ํ์ผ์ ํด๋น ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ํจ์๋ฅผ ์ถ๊ฐํ๋ฉด ์๋ฃ
- ์ฐธ๊ณ ๋ก ์์ฑ ๋์ค import๊ฐ ํ์ํ ๋ถ๋ถ์ด ์๋ค๋ฉด, ๊ฐ๋ค๋๊ณ ctrl + enterํ๋ฉด ์๋ ์์ฑ