[UMC] ๐Ÿ›’1์ฃผ์ฐจ - ์•ˆ๋“œ๋กœ์ด๋“œ ์Šคํ„ฐ๋””

Madeline๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ปยท2022๋…„ 9์›” 25์ผ
0

๊ฐœ๋ฐœ ์ง€์‹

๋ชฉ๋ก ๋ณด๊ธฐ
3/12
post-custom-banner

<Manifest์˜ ์ฃผ์š” ์†์„ฑ 10๊ฐ€์ง€์™€ 4๋Œ€ ์ปดํฌ๋„ŒํŠธ, ๊ทธ๋ฆฌ๊ณ  Intent์— ๋Œ€ํ•ด ์กฐ์‚ฌํ•˜๊ธฐ>

๐Ÿ“– 1. ์•ฑ์—์„œ ์‚ฌ์šฉ๋˜๋Š” 4๋Œ€ Component

-์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค.
ํ•˜๋‚˜์˜ ์•ฑ์€ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
=> ์•ˆ๋“œ๋กœ์ด๋“œ๋Š” ํด๋ž˜์Šค๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐœ๋ฐœํ•œ๋‹ค!
=> ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๊ฐ€ ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋œ๋‹ค!

-์•ฑ์€ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค๋กœ ๊ตฌ์„ฑ๋˜๋Š”๋ฐ,
1) ์ปดํฌ๋„ŒํŠธ ํด๋ž˜์Šค: ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŒ๋“ค์—ˆ์ง€๋งŒ, ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์•ˆ๋“œ๋กœ์ด๋“œ ์‹œ์Šคํ…œ์—์„œ ๊ด€๋ฆฌ
2) ์ผ๋ฐ˜ ํด๋ž˜์Šค: ์•ฑ ์‹คํ–‰ ์‹œ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด ์ƒ์„ฑ๋ถ€ํ„ฐ ์†Œ๋ฉธ๊นŒ์ง€ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ๋ฅผ ๊ฐœ๋ฐœ์ž ์ฝ”๋“œ์—์„œ ๊ด€๋ฆฌ!(์ž„์˜์˜ ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“  ํด๋ž˜์Šค)

< ์ปดํฌ๋„ŒํŠธ >๊ฐ€ : ~ ํด๋ž˜์Šค ์ƒ์†๋ฐ›๋Š”๋‹ค!

1. < activity >

-ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ, ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” UI ํ™”๋ฉด
=> ํ™”๋ฉด์„ ์ถœ๋ ฅ!!
-ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋Š” ์ตœ์†Œ 1๊ฐœ ์ด์ƒ์˜ Activity๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.
-manifest ํŒŒ์ผ์— ์„ ์–ธ๋˜์ง€ ์•Š์€ Activity๋Š” ์‹œ์Šคํ…œ์ด ํ‘œ์‹œํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.
-์•ฑ์˜ ํ™”๋ฉด์„ ์•ˆ๋“œ๋กœ์ด๋“œํฐ์— ์ถœ๋ ฅํ•˜๋ ค๋ฉด Activity๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋ฉฐ, ์•ฑ์ด ์‹คํ–‰๋˜๋ฉด Activity์—์„œ ์ถœ๋ ฅํ•œ ๋‚ด์šฉ์ด ์•ˆ๋“œ๋กœ์ด๋“œํฐ์— ๋‚˜์˜จ๋‹ค.

2. < service >

-UI ์—†์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌ์„ฑ์š”์†Œ์ด๋‹ค. Activity์™€ ๋น„๊ตํ•˜๋ฉด ์ดํ•ด๊ฐ€ ์‰ฝ๋‹ค.
-Activity๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ง์ ‘ ๋ณด์ด๋Š” ํ™”๋ฉด์ด๋ผ๋ฉด, Activity๊ฐ€ ์ข…๋ฃŒ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์—์„œ๋„ ๋™์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ตฌ์„ฑ์š”์†Œ์ด๋‹ค.
-ํ™”๋ฉด ์ถœ๋ ฅ ๊ธฐ๋Šฅ์ด ์—†๋‹ค! ์„œ๋น„์Šค๊ฐ€ ์‹คํ–‰๋˜๋”๋ผ๋„ ํ™”๋ฉด๊ณผ ์ƒ๊ด€์—†์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์žฅ์‹œ๊ฐ„ ์‹คํ–‰ํ•ด์•ผ ํ•  ์—…๋ฌด๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค.

3. < provider > : Contents Provider

-์•ฑ ๋‚ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•œ ์ปดํฌ๋„ŒํŠธ
-์ผ๋ฐ˜์ ์œผ๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ž๋ฃŒ๋ฅผ ์ €์žฅํ•  ๋•Œ DB๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด ๋•Œ ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” DB์—๋Š” ํ•ด๋‹น ์•ฑ ์™ธ์— ๋‹ค๋ฅธ ์•ฑ์˜ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. Contents Provider๋Š” ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
-ex) ์นด์นด์˜คํ†ก ์•ฑ์—์„œ ํ”„๋กœํ•„ ์‚ฌ์ง„ ๋ณ€๊ฒฝํ•  ๋•Œ Contents Provider๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”๋‹ค.

4. < receiver >: Broadcast receiver

-system ์ „๋ฐ˜์—์„œ ํŠน์ • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํž ๋•Œ ์‹คํ–‰๋˜๊ฒŒ ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
-์ด๋ฒคํŠธ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ธฐ๋Šฅ๋งŒ ๋‹ด๋‹นํ•˜๊ณ , ์‚ฌ์šฉ์ž์—๊ฒŒ ์ด๋ฒคํŠธ๋ฅผ ์•Œ๋ฆฌ์ง€๋Š” ์•Š๋Š”๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์ด๋ฅผ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด notification, Toast ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
-ํ•ธ๋“œํฐ์—์„œ ์—์–ดํŒŸ ์—ฐ๊ฒฐ์ด ํ•ด์ œ๋˜์—ˆ์„ ๊ฒฝ์šฐ ์„œ๋น„์Šค์—์„œ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์Œ์•…์„ ์ผ์‹œ์ •์ง€ํ•˜๋ ค๋ฉด, Broadcast receiver๋ฅผ ํ†ตํ•ด ์ด์–ดํฐ ์—ฐ๊ฒฐ์ด ํ•ด์ œ๋˜์—ˆ๋‹ค๋Š” ์ •๋ณด๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ , ์„œ๋น„์Šค๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค.
-ex) ๋ฐฐํ„ฐ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ, ์Šคํฌ๋ฆฐ์ด ์บก์ณ๋  ๋•Œ, ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์„ ๋•Œ ๋“ฑ์˜ ํ–‰์œ„๋ฅผ ์‘๋‹ต๋ฐ›๋Š”๋‹ค.

**์ปดํฌ๋„ŒํŠธ๋Š” ์•ฑ ์•ˆ์—์„œ ๋…๋ฆฝ๋œ ์‹คํ–‰ ๋‹จ์œ„์ด๋‹ค!
-์นด์นด์˜คํ†ก ๋ชฉ๋ก ํ™”๋ฉด -> ์ฑ„ํŒ… ํ™”๋ฉด์œผ๋กœ ํ™”๋ฉด ์ „ํ™˜ ์‹œ, ์ฝ”๋“œ๋ฅผ ๊ฒฐํ•ฉํ•ด์„œ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์•ˆ๋“œ๋กœ์ด๋“œ ์‹œ์Šคํ…œ์— ์˜๋ขฐํ•ด์„œ ๋‘ ํด๋ž˜์Šค๊ฐ€ ์„œ๋กœ ์ข…์†๋˜์ง€ ์•Š๊ณ , ๋…๋ฆฝํ•ด์„œ ์‹คํ–‰๋˜๊ฒŒ ํ•œ๋‹ค.(๊ฐ„์ ‘ ์‹คํ–‰)

๐Ÿ“– 2. Manifest:

  • ๋ชจ๋“  ์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์ ํŠธ์— ๋ฐ˜๋“œ์‹œ ํฌํ•จ๋˜์–ด์•ผ ํ•˜๋Š” ํŒŒ์ผ
    => ๋ฉ”์ธ ํ™˜๊ฒฝ ํŒŒ์ผ!
    (AndroidManifest.xml):
    ํ”„๋กœ์ ํŠธ์˜ Source Set์˜ ๋ฃจํŠธ(src/main)์— ์œ„์น˜ํ•ด์•ผ ํ•œ๋‹ค.

  • Android ๋นŒ๋“œ ๋„๊ตฌ, Android ์šด์˜์ฒด์ œ ๋ฐ Google Play์— ์•ฑ์— ๊ด€ํ•œ ํ•„์ˆ˜ ์ •๋ณด๋ฅผ ์„ค๋ช…ํ•œ๋‹ค.

  • Android Studio๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์„ ๋นŒ๋“œํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๊ณ , ์•ฑ์„ ๋นŒ๋“œํ•˜๋Š” ๋™์•ˆ(ํŠนํžˆ, ์ฝ”๋“œ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์ ์—์„œ) ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋ณธ์ ์ธ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค.

-๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์˜ ๋‚ด์šฉ:

โญ• ์•ฑ์˜ ํŒจํ‚ค์ง€ ์ด๋ฆ„
-์ผ๋ฐ˜์ ์œผ๋กœ ์ฝ”๋“œ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค(ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ)์™€ ์ผ์น˜.
-์•ˆ๋“œ๋กœ์ด๋“œ ๋นŒ๋“œ ๋„๊ตฌ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ์ด ์ด๋ฆ„์œผ๋กœ ์ฝ”๋“œ entity์˜ ์œ„์น˜๋ฅผ ํ™•์ธํ•œ๋‹ค. ์•ฑ์„ ํŒจํ‚ค์ง•ํ•  ๋•Œ ๋นŒ๋“œ ๋„๊ตฌ๊ฐ€ ์ด ๊ฐ’์„ Gradle ๋นŒ๋“œ ํŒŒ์ผ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ID๋กœ ๋Œ€์ฒดํ•œ๋‹ค. ์ด๋Š” ์‹œ์Šคํ…œ๊ณผ Google Play์—์„œ ๊ณ ์œ ํ•œ ์•ฑ ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
//xmlns: XML์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์„ ์–ธ
//์•ˆ๋“œ๋กœ์ด๋“œ ํ‘œ์ค€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ์„ ์–ธ๋œ ๊ฒƒ!

โญ• ์•ฑ์˜ ๊ตฌ์„ฑ์š”์†Œ
-๋ชจ๋“  ์•กํ‹ฐ๋น„ํ‹ฐ, ์„œ๋น„์Šค, Broadcast Receiver, ์ฝ˜ํ…์ธ  ์ œ๊ณต์ž ํฌํ•จ
-๊ฐ ๊ตฌ์„ฑ์š”์†Œ๋Š” Kotlin, Java ํด๋ž˜์Šค์˜ ์ด๋ฆ„๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ์†์„ฑ์„ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค.
-์ž์‹ ์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ธฐ ๊ตฌ์„ฑ์˜ ์ข…๋ฅ˜, ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์‹œ์ž‘๋˜๋Š” ์ง€ ์„ค๋ช…ํ•˜๋Š” ์ธํ…ํŠธ ํ•„ํ„ฐ์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์•ฑ์—์„œ ์ƒ์„ฑํ•˜๋Š” ๊ฐ๊ฐ์˜ ์•ฑ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•ด ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์—์„œ ํ•ด๋‹นํ•˜๋Š” XML ์š”์†Œ๋ฅผ ์„ ์–ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
=> ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์— ๋“ฑ๋กํ•ด์•ผ ์‹œ์Šคํ…œ์ด ์ธ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค!

< activity > Activity์˜ ๊ฐ ํ•˜์œ„ ํด๋ž˜์Šค. ์ด ํƒœ๊ทธ ๋‚ด์— intent filter๊ฐ€ ์กด์žฌํ•˜๊ณ , < intent-filter >ํƒœ๊ทธ ์•ˆ์—๋Š” < action >๊ณผ < category >๊ฐ€ ์กด์žฌํ•˜์—ฌ ์ฒซ ํ™”๋ฉด์„ ๊ฒฐ์ •ํ•œ๋‹ค.

< service > Service์˜ ๊ฐ ํ•˜์œ„ ํด๋ž˜์Šค.

< receiver > BroadcastReceiver์˜ ๊ฐ ํ•˜์œ„ ํด๋ž˜์Šค.

< provider > ContentProvider์˜ ๊ฐ ํ•˜์œ„ ํด๋ž˜์Šค.

๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์—์„œ XML ์š”์†Œ๋ฅผ ์„ ์–ธํ•˜์ง€ ์•Š๊ณ  ์ด ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค๋กœ ์ง€์ •ํ•˜๋ฉด ์‹œ์Šคํ…œ์—์„œ ์ด๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

=> ์ปดํฌ๋„ŒํŠธ ํ•˜๋‚˜ ๋‹น < >ํƒœ๊ทธ ํ•˜๋‚˜๋กœ ๋“ฑ๋กํ•ด์„œ, ๋งŒ์•ฝ์— ์•กํ‹ฐ๋น„ํ‹ฐ 10๊ฐœ๋ฉด < activity > ํƒœ๊ทธ 10๊ฐœ ํ•ด์•ผ ํ•จ

โญ• ์•ฑ์ด ์‹œ์Šคํ…œ/๋‹ค๋ฅธ ์•ฑ์˜ ๋ณดํ˜ธ ๋ถ€๋ถ„์— ์—‘์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•œ ๊ถŒํ•œ
-๋ฐ˜๋“œ์‹œ ์žˆ์–ด์•ผ ํ•˜๋Š” ๋ชจ๋“  ๊ถŒํ•œ ์„ ์–ธ

Android ์•ฑ์€ ๋ฏผ๊ฐํ•œ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ(์˜ˆ: ์—ฐ๋ฝ์ฒ˜, SMS) ๋˜๋Š” ํŠน์ • ์‹œ์Šคํ…œ ๊ธฐ๋Šฅ(์˜ˆ: ์นด๋ฉ”๋ผ, ์ธํ„ฐ๋„ท ์•ก์„ธ์Šค)์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•œ ๊ถŒํ•œ์„ ์š”์ฒญํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๊ถŒํ•œ์€ ๊ณ ์œ ํ•œ ๋ ˆ์ด๋ธ”๋กœ ์‹๋ณ„๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด SMS ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด์•ผ ํ•˜๋Š” ์•ฑ์€ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ค„์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

<activity
            android:name=".MainActivity"
            
//name: ์•กํ‹ฐ๋น„ํ‹ฐ ํ•„์ˆ˜ ์†์„ฑ, ํด๋ž˜์Šค ์ด๋ฆ„์„ ๋“ฑ๋กํ•œ๋‹ค.
=> ์—ฌ๊ธฐ์„œ๋Š” MainActivity ํด๋ž˜์Šค๋ฅผ ์•กํ‹ฐ๋น„ํ‹ฐ๋กœ ๋“ฑ๋กํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ!์ (.)์€ <manifest> ํƒœ๊ทธ์— ๋“ฑ๋กํ•œ MainActivity๊ฐ€ ํŒจํ‚ค์ง€ ๊ฒฝ๋กœ์— ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. 

โญ• ์•ฑ์— ํ•„์š”ํ•œ ํ•˜๋“œ์›จ์–ด ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด ๊ธฐ๋Šฅ
-์ด์— ๋”ฐ๋ผ ์•ฑ์„ Google Play์—์„œ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ธฐ์˜ ์ข…๋ฅ˜๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์—์„œ๋Š” ์•ฑ์— ํ•„์š”ํ•œ ํ•˜๋“œ์›จ์–ด ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ธฐ๋Šฅ์„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๊ณ , ๋”ฐ๋ผ์„œ ์•ฑ๊ณผ ํ˜ธํ™˜๋˜๋Š” ๊ธฐ๊ธฐ ์œ ํ˜•๋„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Google Play Store์—์„œ๋Š” ์•ฑ์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด๋‚˜ ์‹œ์Šคํ…œ ๋ฒ„์ „์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ๊ธฐ๊ธฐ์— ์•ฑ ์„ค์น˜๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

< uses-feature > ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚˜์นจ๋ฐ˜ ์„ผ์„œ๊ฐ€ ์—†๋Š” ๊ธฐ๊ธฐ์—์„œ ์•ฑ์ด ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด, ํ•„์š”์— ๋”ฐ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚˜์นจ๋ฐ˜ ์„ผ์„œ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<manifest ... >
    <uses-feature android:name="android.hardware.sensor.compass"
                  android:required="true" />
    ...
</manifest>

๐Ÿ“– 3. ์ธํ…ํŠธ?

โญ• Intent: ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์— ์ž‘์—… ์ˆ˜ํ–‰์„ ์œ„ํ•œ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

  1. ์ค‘์žฌ ์—ญํ• 
    => ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ  ์‹œ์Šคํ…œ์— ์ „๋‹ฌํ•˜๋Š” ๋ฉ”์‹œ์ง€!
    => ๊ธฐ๋Šฅ์ด ์•„๋‹Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ํด๋ž˜์Šค์ด๋‹ค.
    ex) MainActivity => DetailActivity๋กœ ํ™”๋ฉด ์ „ํ™˜ ์‹œ์—
    MainActivity ํด๋ž˜์Šค์—์„œ DetailActivity ํด๋ž˜์Šค๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด, ์‹œ์Šคํ…œ์— ์ธํ…ํŠธ๋ฅผ ์ „๋‹ฌํ•ด์ค˜์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์‹œ์Šคํ…œ์—์„œ ์ธํ…ํŠธ์˜ ์ •๋ณด๋ฅผ ๋ถ„์„ํ•ด์„œ ๊ทธ์— ๋งž๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‹คํ–‰ํ•ด์ค€๋‹ค!!

=> 4๋Œ€ ์ปดํฌ๋„ŒํŠธ๋Š” ๊ฐ๊ฐ ์ธํ…ํŠธ์— ์˜ํ•ด ํ™œ์„ฑํ™”๋œ๋‹ค!

val intent: Intent = Intent(this, DetailActivity::class.java)
startActivity(intent)
//startActivity() ํ•จ์ˆ˜๊ฐ€ ์ธํ…ํŠธ๋ฅผ ์‹œ์Šคํ…œ์— ์ „๋‹ฌ!

=> DetailActivity ์˜ ์ •๋ณด๋ฅผ Intent ๊ฐ์ฒด์— ๋Œ€์ž…ํ•œ ๊ฒƒ

1) ๋ช…์‹œ์  ์ธํ…ํŠธ: ํด๋ž˜์Šค ํƒ€์ž… ๋ ˆํผ๋Ÿฐ์Šค ์ •๋ณด๋ฅผ ํ™œ์šฉํ•œ ์ธํ…ํŠธ
=> ์œ„ ์ฝ”๋“œ์—์„œ

DetailActivity::class.java

2) ์•”์‹œ์  ์ธํ…ํŠธ: ์ธํ…ํŠธ ํ•„ํ„ฐ ์ •๋ณด๋ฅผ ํ™œ์šฉํ•œ ์ธํ…ํŠธ
=> ์™ธ๋ถ€ ์•ฑ์˜ ์ปดํฌ๋„ŒํŠธ์˜ ์š”์ฒญ ์ฒ˜๋ฆฌ...

๐Ÿ“– 2. Palette์— ์กด์žฌํ•˜๋Š” View ์ค‘ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์š”์†Œ๋“ค์— ๋Œ€ํ•ด ์กฐ์‚ฌํ•˜๊ธฐ

  • Palette โ†’ Layout ํŒŒ์ผ ๋งŒ๋“ค๋ฉด ์™ผ์ชฝ์— ๋‚˜์˜ค๋Š” TextView, ImageView์™€ ๊ฐ™์€ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋Š” View ๋ชฉ๋ก
  • ๊ฐ View๋“ค์ด ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€, ์–ด๋–จ ๋•Œ ์“ฐ์ด๋Š”์ง€ ์กฐ์‚ฌํ•ด๋ณด๊ธฐ
  • ๊ฐ View๋“ค์—์„œ ๋Œ€ํ‘œ์ ์œผ๋กœ ์–ด๋–ค ์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋„ ์กฐ์‚ฌ
  1. TextView
    -๋ฌธ์ž์—ด์„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” ๋ทฐ

    <TextView
        android:id="@+id/textView"
        android:layout_width="241dp"
        android:layout_height="129dp"
        android:layout_marginTop="76dp"
        android:fontFamily="sans-serif-black"
        android:text="@string/main_title"
        android:textColor="@color/white"
        android:textSize="32dp"
        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"></TextView>
  1. Button
    -์‚ฌ์šฉ์ž ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌ

  2. ImageView
    -์ด๋ฏธ์ง€๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” ๋ทฐ

<ImageView
        android:id="@+id/imageView2"
        android:layout_width="260dp"
        android:layout_height="400dp"
        android:src="@drawable/main_img"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.496"
        app:layout_constraintStart_toStartOf="parent"
  1. RecyclerView
    -๋ชฉ๋ก ํ™”๋ฉด ๋งŒ๋“ค ๋–„ ์‚ฌ์šฉ
    -๊ตฌ์„ฑ์š”์†Œ ์ด์šฉ(ViewHolder, Adapter, LayoutManager, ItemDecoration)

  2. FragmentContainerView

  3. ScrollView
    -์œ„์ ฏ, ๋ ˆ์ด์•„์›ƒ์ด ํ™”๋ฉด์— ๋„˜์น  ๋•Œ ์Šคํฌ๋กค ํšจ๊ณผ
    -ํ•˜๋‚˜์˜ ์œ„์ ฏ๋งŒ ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ

  4. Switch
    -์˜จ/์˜คํ”„ ์ƒํƒœ ํ‘œ์‹œ

  5. ImageButton
    -๋ฒ„ํŠผ์ฒ˜๋Ÿผ ์ด๋ฏธ์ง€๋ฅผ ํด๋ฆญํ•˜๋Š” ์šฉ๋„

  6. ChipGroup & Chip

  7. CheckBox

  • ๋‹ค์ค‘ ์„ ํƒ
  1. RadioGroup & RadioButton
    -RadioButton - ๋‹จ์ผ ์„ ํƒ ์ƒ์ž ์ปจํŠธ๋กค
    -์—ฌ๋Ÿฌ ๊ฐœ ์ค‘ ํ•˜๋‚˜ ์„ ํƒ ๋ฒ„ํŠผ

  2. FloatingActionButton

  3. WebView
    -์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ์›น ํŽ˜์ด์ง€๋ฅผ ๋ ˆ์ด์•„์›ƒ์˜ ์ผ๋ถ€๋กœ ํ‘œ์‹œ

  4. ProgressBar
    -์ง„ํ–‰ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋ทฐ
    -์ง์„  ํ˜•ํƒœ, ์›ํ˜• ํ˜•ํƒœ

  5. SeekBar
    -ProgressBar์„ ํ™•์žฅํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ํ„ฐ์น˜๋กœ ์ƒํƒœ ๋ณ€๊ฒฝ
    -๋ณผ๋ฅจ ์กฐ์ ˆ, ํ™”๋ฉด ๋ฐ๊ธฐ ์กฐ์ ˆ์— ์‚ฌ์šฉ

  6. Spinner
    -PC์˜ ๋“œ๋กญ๋‹ค์šด ๋ฐ•์Šค, ํ™”๋ฉด์ด ์ž‘์€ ์Šค๋งˆํŠธํฐ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™•์žฅํ•˜์—ฌ ์˜ต์…˜์„ ๋ณด์—ฌ์ฃผ๋Š” ์šฉ๋„

  7. HorizontalScrollView
    -์ˆ˜ํ‰ ์Šคํฌ๋กค ๋ทฐ

  8. NestedScrollView

๐Ÿ“– 3. ์ฃผ์š” Layout 6๊ฐ€์ง€ ์กฐ์‚ฌํ•˜๊ธฐ

  • ๊ฐ Layout์ด ์–ด๋–ค ํ™”๋ฉด์„ ๊ตฌ์ถ•ํ•  ๋•Œ, ์–ด๋–ค ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๋Š”์ง€ ์กฐ์‚ฌ

1. LinearLayout: ์„ ํ˜• ๋ฐฐ์น˜

-๋ทฐ๋ฅผ ๊ฐ€๋กœ๋‚˜ ์„ธ๋กœ ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜์—ดํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ ํด๋ž˜์Šค
-orientation ์†์„ฑ์— horizontal(๊ฐ€๋กœ)์ด๋‚˜ vertical(์„ธ๋กœ) ๊ฐ’์œผ๋กœ ๋ฐฉํ–ฅ ์ง€์ •

2. RelativeLayout: ์ƒ๋Œ€ ์œ„์น˜๋กœ ๋ฐฐ์น˜

-์ž์‹ View๋“ค์ด ์„œ๋กœ ์ƒ๋Œ€์  ๋ฐฐ์น˜ ๊ด€๊ณ„์— ๋”ฐ๋ผ ํ™”๋ฉด์— ํ‘œ์‹œ๋  ์œ„์น˜๊ฐ€ ๊ฒฐ์ •๋˜๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋ ˆ์ด์•„์›ƒ ํด๋ž˜์Šค

3. FrameLayout: ๊ฒน์ณ์„œ ๋ฐฐ์น˜

-์นด๋“œ ์Œ“๋“ฏ์ด ๋ทฐ๋ฅผ ์ถ”๊ฐ€ํ•œ ์ˆœ์„œ๋Œ€๋กœ ์œ„์— ๊ฒน์ณ์„œ ๊ณ„์† ์ถœ๋ ฅํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ.

4. TableLayout: ํ…Œ์ด๋ธ” ํ˜•ํƒœ๋กœ ๋ฐฐ์น˜

-์•„๋ž˜์— ์žˆ๋Š” GridLayout๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, ํ•œ ์ค„์„ TableRow๋กœ ํ‘œํ˜„ํ•ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ข€ ๋” ๋ถˆํŽธํ•˜๋‹ค.
-ํ…Œ์ด๋ธ” ์…€์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ณ ์ •์ด๋ผ๋ฉด ํฐ ์ฐจ์ด๊ฐ€ ์—†์ง€๋งŒ, ์…€์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋ณ€ํ•˜๋ฉด, TableLayout์€ ํ–‰์„ ๊ณ„์‚ฐํ•ด์„œ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.

5. GridLayout: ํ‘œ ํ˜•ํƒœ๋กœ ๋ฐฐ์น˜

-ํ–‰๊ณผ ์—ด๋กœ ๊ตฌ์„ฑ๋œ ํ…Œ์ด๋ธ” ํ™”๋ฉด์„ ๋งŒ๋“œ๋Š” ๋ ˆ์ด์•„์›ƒ ํด๋ž˜์Šค
-TableLayout๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, ์…€์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋ณ€ํ•  ๋•Œ ๋ฐฉํ–ฅ๊ณผ ๊ฐœ์ˆ˜๋งŒ ์„ค์ •ํ•˜๋ฉด ์•Œ์•„์„œ ํ–‰์ด ๊ฒฐ์ •๋˜๋ฏ€๋กœ ์ข€ ๋” ํŽธ๋ฆฌํ•˜๋‹ค.

6. ConstraintLayout: ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ๋ฐฐ์น˜

-์ œ์•ฝ์กฐ๊ฑด ๊ธฐ๋ฐ˜ ๋ชจ๋ธ
-RelativeLayout๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, ๋” ๋งŽ์€ ์†์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค.
-๋ ˆ์ด์•„์›ƒ ํŽธ์ง‘๊ธฐ ์ œ๊ณต: ๋ ˆ์ด์•„์›ƒ XMLํŒŒ์ผ์„ ๋””์ž์ธ ๋ชจ๋“œ๋กœ ์—ด๋ฉด ์‹คํ–‰๋œ๋‹ค
=>์—ฌ๊ธฐ์— Palette, ToolBar ๋“ฑ ๊ธฐ๋Šฅ์ด ์žˆ์Œ.

-๋‹ค๋ฅธ ๋ ˆ์ด์•„์›ƒ๋ณด๋‹ค ํ˜ธ์ถœ ํšŸ์ˆ˜๊ฐ€ ์ ์–ด ์‚ฌ์šฉํ•˜๊ธฐ ํŽธ๋ฆฌํ•˜๋‹ค.
์—…๋กœ๋“œ์ค‘..

profile
๐ŸŽ Apple Developer Academy@POSTECH 2๊ธฐ, ๐Ÿ€ SeSAC iOS 4๊ธฐ
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€