1 ์๋๋ก์ด๋์ ์ฝํ๋ฆฐ
์๋๋ก์ด๋ OS ํน์ง
- 1. ์คํ์์ค
- ๊ฐ๋ฐ์๋ค์ด ์์ค ์ฝ๋์ ์ ๊ทผํ์ฌ ์ด๋ฅผ ์์ ํ๊ณ ๋ฐฐํฌ ๊ฐ๋ฅ
- ๋ค์ํ ์ ์กฐ์ฌ๊ฐ ์์ ๋ค์ ๊ธฐ๊ธฐ์ ๋ง์ถคํ ์๋๋ก์ด๋ ๋ฒ์ ์ ๊ฐ๋ฐํ ์ ์์ - 2. ๋ค์ํ ํ๋์จ์ด ์ง์
- ์๋๋ก์ด๋๋ ๋ค์ํ ํ๋์จ์ด ํ๋ซํผ์ ์ง์, ์ด์=ํฌํ ์ด ์ฌ์
- ์ ์กฐ์ ์ฒด๊ฐ ๋ค์ํ ์ข ๋ฅ์ ๊ธฐ๊ธฐ๋ฅผ ์ถ์ํ ์ ์๊ฒ ํ๋ฉฐ, ์๋น์์๊ฒ๋ ๋ ๋ง์ ์ ํ๊ถ์ ์ ๊ณต - 3. ๊ตฌ๊ธ ์๋น์ค์์ ํตํฉ
- ๊ตฌ๊ธ ํ๋ ์ด ์คํ ์ด๋ฅผ ํฌํจํ ๊ตฌ๊ธ์ ๋ค์ํ ์๋น์ค์ ๋ฐ์ ํ๊ฒ ํตํฉ
- ์ฌ์ฉ์๋ ์ฑ, ๊ฒ์, ์ฑ , ์ํ ๋ฑ ๋ค์ํ ์ฝํ ์ธ ์ ์ฝ๊ฒ ์ ๊ทผ - 4. ์ปค์คํฐ๋ง์ด์ง ๊ฐ๋ฅ
- ์๋๋ก์ด๋๋ ํ ์คํฌ๋ฆฐ ์์ ฏ, ๋ผ์ด๋ธ ๋ฐฐ๊ฒฝํ๋ฉด, ๋ค์ํ ๋ฐ์ฒ ์ฑ ๋ฑ์ ํตํด ์ฌ์ฉ์ ๋ง์ถคํ๊ฐ ๊ฐ๋ฅ
- ์์ ์ ๊ธฐ๊ธฐ๋ฅผ ๊ฐ์ธ์ ์ทจํฅ์ ๋ง๊ฒ ์กฐ์ - 5. ๋ฉํฐํ์คํน
- ๊ฐ๋ ฅํ ๋ฉํฐํ์คํน ๊ธฐ๋ฅ์ ์ง์
- ์ฌ์ฉ์๊ฐ ์ฌ๋ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ ์คํํ๊ณ ์ฝ๊ฒ ์ ํ - 6. ๊ธฐํ
- ๋ณด์, ์ ๊ธฐ์ ์ธ ์ ๋ฐ์ดํธ, API์ง์, ๋๊ท๋ชจ ์ฌ์ฉ์ ํ ๋ฑ
์ด์์ฒด์ ์ ํ๋ซํผ
- ๋ชจ๋ฐ์ผ ์ด์์ฒด์ (์คํ) + ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ(๊ฐ๋ฐ)
- ์๋๋ก์ด๋ ํ๋ซํผ์ ๋ฆฌ๋ ์ค ์ด์์ฒด์ ์์์ ๋ฆฌ๋ ์ค์ ์ํธ์์ฉํ๋ฉด์ ๋์
- ์ ์ฒด ์ํคํ ์ฒ ์์ชฝ์ ์๋๋ก์ด๋๊ฐ ์คํ๋๋ ๋ฐํ์ ์์ญ(ํ๋์์ผ๋ก ํ์)์ด ์กด์ฌ
Linux Kernel (๋ฆฌ๋ ์ค ์ปค๋)
- Drivers (Audio, IPC, Display, Keypad, Bluetooth, Camera, USB ...)
- ART(Android ๋ฐํ์)๋ ์ค๋ ๋ฉ ๋ฐ ํ์ ์์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๊ฐ์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ Linux์ปค๋์ ์ฌ์ฉ
- Android๋ Linux์ปค๋์ ์ฃผ์ ๋ณด์ ๊ธฐ๋ฅ์ ํ์ฉ
- ๋ค์ํ ํ๋์จ์ด ๋๋ฐ์ด์ค ๋๋ผ์ด๋ฒ ์ ๊ณต
HAL (Hardware Abstraction Layer, ํ๋์จ์ด ์ถ์ํ ๊ณ์ธต)
- Audio, Bluetooth, Camera, Sensors...
- ์์ ์์ค์ Java API ํ๋ ์์ํฌ์ ๊ธฐ๊ธฐ ํ๋์จ์ด ๊ธฐ๋ฅ์ ๋ ธ์ถํ๋ ํ์ค ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณต
- ํ๋ ์์ํฌ API๊ธฐ๊ธฐ๊ฐ ํ๋์จ์ด์ ์ก์ธ์คํ๊ธฐ ์ํด ํธ์ถ์ ์ํํ๋ฉด,
- Android ์์คํ ์ด ํด๋น ํ๋์จ์ด ๊ตฌ์ฑ ์์์ ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋์ ๋ก๋
Android Runtime (์๋๋ก์ด๋ ๋ฐํ์)
- ART(Android Runtime), Core Libraries
- Android ๋ฒ์ 5.0 (API๋ ๋ฒจ21) ์ด์์ ์คํํ๋ ๊ธฐ๊ธฐ์ ๊ฒฝ์ฐ,
๊ฐ ์ฑ์ด ์์ฒด ํ๋ก์ธ์ค ๋ด์์ ์์ฒด ART(Android๋ฐํ์) ์ธ์คํด์ค๋ก ์คํ - ART๋ DEXํ์ผ์ ์คํํ์ฌ ์ ์ฉ๋ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๊ธฐ์์ ์ฌ๋ฌ ๊ฐ์ ๋จธ์ ์ ์คํํ๋๋ก ์์ฑ ๋จ
- DEXํ์ผ์ Android์ฉ์ผ๋ก ํน๋ณํ ์ค๊ณ๋ ๋ฐ์ดํธ ์ฝ๋ ํ์์ผ๋ก, ์ต์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ง๊ฒ ์ต์ ํ ๋์ด ์์
- Android๋ฒ์ 5.0 (API ๋ ๋ฒจ21) ์ด์ ๋ฒ์ ์์๋ Dalvik์ด Android ๋ฐํ์
- ์ฑ์ด ART์์ ์ ๋๋ก ์คํ๋๋ฉด Dalvik์์๋ ์ ๋๋ก ์คํ๋์ง๋ง,๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ ์ ๋๋ก ์คํ ๋๋ค๋ ๋ณด์ฅ์ ์์
- Android์๋ Java API ํ๋ ์์ํฌ๊ฐ ์ฌ์ฉํ๋ ๋ช ๊ฐ์ง Java 8์ธ์ด ๊ธฐ๋ฅ์ ํฌํจํ์ฌ,
๋๋ถ๋ถ์ Javaํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ผ๋ จ์ ํต์ฌ ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํฌํจ๋์ด ์์
Native C/C++ Libraries (๋ค์ดํฐ๋ธ C/C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ)
- Webkit, OpenMAX AL, Libc, Media Framework, OpenGL ES ...
- ART ๋ฐ HAL๋ฑ์ ๋ง์ ํต์ฌ Android์์คํ ๊ตฌ์ฑ ์์์ ์๋น์ค๊ฐ C ๋ฐ C++๋ก ์์ฑ๋ ๋ค์ดํฐ๋ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์๋ก ํ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋น๋๋จ
- Android ํ๋ซํผ์ Javaํ๋ ์์ํฌ API๋ฅผ ์ ๊ณตํ์ฌ ์ผ๋ถ ๋ค์ดํฐ๋ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ฅ์ ์ฑ์ ๋
ธ์ถ
(์) Android ํ๋ ์์ํฌ์ JavaOpenGL API๋ฅผ ํตํด OpenGLES์ ์ก์ธ์คํ์ฌ,
์ฑ์์ 2D ๋ฐ 3D ๊ทธ๋ํฝ์ ๊ทธ๋ฆฌ๊ณ ์กฐ์ํ ์ ์๋ ์ง์ ๊ธฐ๋ฅ์ ์ถ๊ฐ
Java API Framework (์๋ฐ API ํ๋ ์์ํฌ)
- Content Providers, View System, Managers(Activity, Location, Package, Window, Notification ...)
- Android OS์ ์ ์ฒด ๊ธฐ๋ฅ ์ธํธ๋ Java ์ธ์ด๋ก ์์ฑ ๋ API๋ฅผ ํตํด ์ก์ธ์ค ๊ฐ๋ฅ
- ์ด๋ฌํ API๋ ํต์ฌ ๋ชจ๋์ ์์คํ ๊ตฌ์ฑ ์์/์๋น์ค ์ฌํ์ฉ์ ๋จ์ํ, Android ์ฑ์ ์์ ํ์ํ ๋น๋ฉ ๋ธ๋ก ๊ตฌ์ฑ
- ๋น๋ฉ ๋ธ๋ก ์ข
๋ฅ
(1) View System(๋ชฉ๋ก, ๊ทธ๋ฆฌ๋, ํ ์คํธ ์์, ๋ฒํผ ๋ฐ ์ฝ์ )
- ๊ฐ๋ฅํ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ํฌํจํ์ฌ ์ฑ์ UI๋ฅผ ๋น๋ํ๋ ๋ฐ ์ฌ์ฉ ๊ฐ๋ฅ, ๊ธฐ๋ฅ์ด ํ๋ถํ๋ฉฐ ํ์ฅ ๊ฐ๋ฅ
(2) ResourceManager
- ํ์งํ ๋ ๋ฌธ์์ด, ๊ทธ๋ํฝ ๋ฐ ๋ ์ด์์ ํ์ผ๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ์๋ ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค ์ ๊ณต
(3) NotificationManager
- ๋ชจ๋ ์ฑ์ด ์ํ ํ์ ์ค์ ์ฌ์ฉ์ ์ง์ ์๋ฆผ์ ํ์ ํ ์ ์๋๋ก ์ง์
(4) Activity Manager
- ์ฑ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ๊ณตํต ํ์ ๋ฐฑ์คํ ์ ๊ณต
(5) ์ฝํ ์ธ ์ ๊ณต์ (Content Providers)
- ์ฑ์ด ์ฃผ์๋ก ์ฑ๊ณผ ๊ฐ์ ๋ค๋ฅธ์ฑ์ ๋ฐ์ดํฐ์ ์ก์ธ์คํ๊ฑฐ๋ ์์ ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ์ ์๋๋ก ์ง์
System Apps (์์คํ ์ฑ)
- Dialer, Email, Calender, Camera ...
- Android๋ ์ด๋ฉ์ผ, SMS๋ฉ์์ง, ์บ๋ฆฐ๋, ์ธํฐ๋ท ๊ฒ์, ์ฃผ์๋ก ๋ฑ์ ์ฃผ์ ์ฑ ์ธํธ์ ํจ๊ป ์ ๊ณต
- ํ๋ซํผ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํจ๋ ์ฑ์๋ ์ฌ์ฉ์๊ฐ ๋ฐ๋ก ์ค์นํ๋ ์ฑ๊ณผ ๊ตฌ๋ณ๋๋ ํน๋ณํ ๊ฒ ์๋
- ๋ฐ๋ผ์ ํ์ฌ ์ฑ์ด ์ฌ์ฉ์์ ๊ธฐ๋ณธ ์น ๋ธ๋ผ์ฐ์ , SMS ๋๋ ๊ธฐ๋ณธ ํค๋ณด๋๊ฐ ๋ ์ ์์
(๋จ, ์์คํ ์ ์ค์ ์ฑ ๋ฑ ์์ธ๊ฐ ์ ์ฉ๋ ์ ์์) - ์์คํ
์ฑ์ ์ฌ์ฉ์๋ฅผ ์ํ ์ฑ์ผ๋ก๋ ์๋ํ๊ณ ,
๊ฐ๋ฐ์๊ฐ ์์ ์ ์ฑ์์ ์ก์ธ์คํ๋ ์ฃผ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ธฐ ์ํ ์ฉ๋๋ก๋ ์๋ - ์ฑ์ด SMS๋ฉ์์ง๋ฅผ ์ ๊ณตํ๊ณ ์ ํ ๊ฒฝ์ฐ ํด๋น ๊ธฐ๋ฅ์ ์ง์ ๋น๋ X, ์ด๋ฏธ ์ค์น ๋ SMS์ฑ์ ํธ์ถ
ํ๋ซํผ ๋ฒ์ ๊ณผ API ๋ ๋ฒจ
โ ์๋๋ก์ด๋๋ ํ๋ซํผ ๋ฒ์ ๊ณผ ๋ณ๊ฐ๋ก API ๋ ๋ฒจ์ด ์กด์ฌ
โ API = ๊ฐ๋ฐ์์๊ฒ ์๋๋ก์ด๋ ํ๋ซํผ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ์ ๊ณตํ๋ ๋๊ตฌ
(API ๋ ๋ฒจ์ ๋ฐ๋ผ์ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๊ฑฐ๋ ์ฝ๋ ์ ์ฒด๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ๊ฒฝ์ฐ๋ ์์)
๋ฐ๋ผ์, API ๋ ๋ฒจ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ ๋๋ ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ค์ ํ๋ฒ ํ์ธํด์ผ ํจ
โโ
โ ํ์ฌ ํ๋ซํผ์ ์ต์ ๋ฒ์ ์ ์๋๋ก์ด๋ 14์ด์ง๋ง ์ค์ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ๋ฒ์ ์ ํจ์ฌ ๋ค์ํจ
โ ์๋๋ก์ด๋ ์คํ๋์ค์์ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋ "Help me choose"๋งํฌ๋ฅผ ๋๋ฌ ๋ฒ์ ๋ณ ์ ์ ์จ์ ํ์ธ ๊ฐ๋ฅ
โ ํน๋ณํ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ํ์ฌ ์์ ์์ ๋๋ฐ์ด์ค๊ฐ ์ ์ฒด์ 98% ์ ๋ ์ฐจ์งํ๋ ๋ฒ์ ์๋์ ์ด์ ๋ฒ์ ์ ๊ณ ๋ ค X
๐ก์๋๋ก์ด๋๋ ์ผ๋
์ ํ ๋ฒ ์ ๋ ๋ฉ์ด์ ๋ฒ์ ์ด ์
๋ฐ์ดํธ (= ์๋ก์ด ๋ฒ์ ์ ์๋๋ก์ด๋ ์ถ์)
๐ก์๋ก์ด ๋ฒ์ ์ผ๋ก ์ฌ์ฉ์๊ฐ ์ฎ๊ฒจ ๊ฐ๋ ๋ฐ๋ ์ ์ด๋ ๋ช ๋
์ ์๊ฐ์ด ์์๋จ.
๋ฐ๋ผ์ ํญ์ ์ต์ ๋ฒ์ ์ ๋ง์ถฐ์ ๊ฐ๋ฐํ ํ์ X
์ฝํ๋ฆฐ(Kotlin)
โ ์๋๋ก์ด๋ ํ๋ซํผ์ ๊ตฌ์กฐ: ๋ฆฌ๋
์ค ์ปค๋ + ์๋ฐ API ํ๋ ์์ํฌ ๊ฒฐํฉ๋ ํํ
โ ๊ณผ๊ฑฐ์ ์๋๋ก์ด๋ ํ๋ซํผ์ ๋ํ ์ค๋ช
์๋ JVM(์ ํํ๋ Dalvik VM)์ด ํญ์ ๋ฐ๋ผ ๋ถ์์
-> ์๋ฐ ๊ฐ์ ๋จธ์ ์์์ ์ฑ์ด ๋์ํ๊ธฐ ๋๋ฌธ
โ ํ์ฌ๋ ์ด๋ฅผ ๋์ ํด ์๋๋ก์ด๋ ๋ฐํ์(Android Runtime, ART)์ ์ฌ์ฉ
โ ๋ฐ๋ผ์ JVM์ด ์์ง๋ง ์ฌ์ ํ ๊ฐ์ ๋จธ์ ์์์ ๋์ํ๋ค๋ ์ ์์ ์๋ฐ์ ๋์ ๊ตฌ์กฐ๋ฅผ ์ฐจ์ฉํ๊ณ ์์
โ ๊ธฐ์กด์๋ ์๋ฐ๊ฐ ์ฑ ๊ฐ๋ฐ ์ธ์ด → 2017๋
5์ Google I/O์์ Kotlin์ ๊ณต์ ์ธ์ด๋ก ์ฑํํ ํ ์ฝํ๋ฆฐ์ผ๋ก ์ฑ์ ๊ฐ๋ฐ
โ Google์ 2019๋
Goolge I/O์์ Kotlin ํผ์คํธ๋ฅผ ์ ์ธํ๋ฉฐ ๋ชจ๋ ๋ฌธ์์์ Kotlin ์ฝ๋๋ฅผ ๋จผ์ ๋
ธ์ถํ๋ ๋ฑ ์ข ๋ ๊ฐ๋ ฅํ๊ฒ Kotlin์ ๋ฉ์ธ ์ธ์ด๋ก ์ง์ํ๊ณ ์์
โ Kotlin์ Jetbrains์ฌ๊ฐ ๋ง๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
โ ์ ฏํ๋ ์ธ ์ฌ์์ ๋ง๋ ๊ฐ์ฅ ์ ๋ช
ํ ํ๋ก๊ทธ๋จ์ IntelliJ๋ผ๋ ๊ฐ๋ฐ ํด / ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋๋ก์ด๋ ์คํ๋์ค ํ์
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ฝํ๋ฆฐ
โ Kotlin์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ฐฉ
โ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๋น๊ต:
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํด๋์ค ๋ด๋ถ์ ์๋ ํจ์์์๋ง ๋ก์ง์ ์์ฑํ์ง๋ง,
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ด๋ฐ ์ ํ ์์ด ์ด๋์์๋ ์์ฑํ ์ ์์
// [Java Code] - ํด๋์ค ๋ด๋ถ์์๋ง ๋ก์ง ์์ฑ
class Hello {
public static void main(String args[]) {
System.out.print("Hello World");
}
}
// [Kotlin Code] - ์ ํ ์์
print("Hello World")
โ
์๋๋ก์ด๋ ๊ฐ๋ฐ์ ์์ด์ ์๋ฐ์ ์ฝํ๋ฆฐ์ ์ฐจ์ด
โ Kotlin์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์๋ฐ๋ก ์์ฑํ์ ๋๋ณด๋ค๋ ์ฝ๋์ ์์ด ํจ์ฌ ์ ์ด์ง
โ ๊ฐ๋จํ๊ฒ ์ฒดํฌ๋ฐ์ค๋ฅผ ํด๋ฆญํ๋ฉด ํ๋ฉด์์ ์ด๋ฏธ์ง๋ฅผ ์จ๊ฒผ๋ค๊ฐ ๋ณด์ฌ์ฃผ๋ ์ฝ๋
: ์๋์ ๊ฐ์ด ์๋ฐ 10์ค ์ด์, ์ฝํ๋ฆฐ 3์ค๋ก ํฌ๊ฒ ์ฐจ์ด๊ฐ ๋จ
// ์๋ฐ์ฝ๋
CheckBox checkBox = findViewById(R.id.check);
ImageView imageView = findViewById(R.id.image);
check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onChanged(CompoundButton buttonView, boolean isChecked){
if (isChecked){
image.setVisibility(View.VISIBLE);
} else {
image.setVisibility(View.GONE);
}
}
});
// ์ฝํ๋ฆฐ ์ฝ๋
binding.check.setOnCheckedChangeListener { buttonView, isChecked ->
binding.image.visibility = if(isChecked) View.VISIBLE else View.GONE
}
2 ์๋๋ก์ด๋ ์ํคํ ์ฒ
์์ค ์ฝ๋ ์์ฑ์์ ์คํ๊น์ง
โ ์์ค ์ฝ๋ ์์ฑ: ์ฝํ๋ฆฐ์ผ๋ก ์์ค ์ฝ๋๋ฅผ ์์ฑํฉ
โ ์ค์น ํ์ผ ์์ฑ: ๋ช
๋ น์ ํตํด ์๋๋ก์ด๋์์ ์คํ๋ ์ ์๋ ์ค์น ํ์ผ์ ํํ๋ก ๋ฐํ
โ ์
๋ก๋: ๊ตฌ๊ธ ํ๋ ์ด ์คํ ์ด์ ์ฑ์ ์
๋ก๋
โ ์ฑ ๋ฑ๋ก: ๊ตฌ๊ธ ํ๋ ์ด ์คํ ์ด์ ์ฑ์ ๋ฑ๋ก
โ ์ฑ ์ ํ / ์ค์น: ์ค๋งํธํฐ์ผ๋ก ๊ตฌ๊ธ ํ๋ ์ด ์คํ ์ด์ ์ ์ํ ๋ค์ ์ค์นํ ์ฑ์ ์ ํ / ์ค์น
โ ์ค๋งํธํฐ์์ ์คํ: ์์ด์ฝ์ ํฐ์นํด์ ์ฑ์ ์คํ
์ฝ๋๊ฐ ์ค๋งํธํฐ์์ ์คํ๋๋ ๊ณผ์
1. ๋น๋(์ปดํ์ผ + ๋น๋ฐ๋ฒํธ) - 'B.์ค์น ํ์ผ ์์ฑ' ๋จ๊ณ
๋จผ์ ์์ค ์ฝ๋๋ฅผ ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํํ๋ฉฐ,
APK ๋งค๋์ ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ๊ฐ์ง๊ณ ์๋ ํค ์คํ ์ด์ ์กฐํฉํด์ ์ต์ข
์ค์น ํ์ผ์ ์์ฑ
2. ํ์ผ ๊ฒ์ฆ - 'C.์ ๋ก๋' ๋จ๊ณ
๋จ์ํ ํ์ผ์ ์
๋ก๋ํ๋ ๋ฐ์ ๋๋๋ ๊ฒ ์๋๋ผ ๊ตฌ๊ธ ํ๋ ์ด ์คํ ์ด์์ ์ฑ์ ๊ฒ์ํ๋ ๊ณผ์ ์ ๊ฑฐ์นจ
์ด ๋ ์ค์น ํ์ผ์ด ์ ์์ ์ผ๋ก ๋์ํ๋์ง, ๋ณด์์์ ๋ฌธ์ ๋ ์๋์ง ๋ฑ์ ๊ฒ์ฌ
3. ํ๋ซํผ ๋ฒ์ ์ฒดํฌ - 'E. ์ฑ ์ ํ' ๋จ๊ณ
์ค๋งํธํฐ์ผ๋ก ๊ตฌ๊ธ ํ๋ ์ด ์คํ ์ด์ ์ ์ํ๋ฉด ์ค๋งํธํฐ์ ํ๋ซํผ ๋ฒ์ ์ ํ์ธํ ๋ค์ ์ค์น ๊ฐ๋ฅํ ์ฑ์ ๋ชฉ๋ก๋ง ๋ ธ์ถ
4. AOT ์ปดํ์ผ / ์ค์น ๊ถํ ์ฒดํฌ - 'E. ์ฑ ์ค์น' ๋จ๊ณ
APK ํ์ผ์ ์ค์นํ๋ฉด ๋ฆฌ๋
์ค์์ ์คํ ๊ฐ๋ฅํ ํ์ผ๋ก ์๋๋ก์ด๋ํฐ ๋ด๋ถ์์ ํ ๋ฒ ๋ ์ปดํ์ผ
์ด ๊ณผ์ ์ ํตํด ์คํ ์๋๊ฐ ๋นจ๋ผ์ง๋ฉฐ ์ฌ์ฉ์์๊ฒ ๊ธฐ๋ฅ์ ์ฌ์ฉ๊ถํ์ ์์ฒญ
5. JIT ์ปดํ์ผ / ์คํ ๊ถํ ์ฒดํฌ - 'F. ์ค๋งํธํฐ์์ ์คํ' ๋จ๊ณ
4๋ฒ์์ ์ค์นํ ๋๋ ํ์ํ ํ์ผ๋ง ์ปดํ์ผํ๊ณ ,
์ฒซ ๋ฒ์งธ ์ฑ์ ์คํํ ๋ ๋ฏธ๋ฆฌ ์ปดํ์ผ๋์ง ์์ ํ์ผ์ ํธ์ถํ๋ฉด์ ๋ฆฌ๋
์ค ์คํ ํ์ผ๋ก ์ปดํ์ผ
๊ทธ๋ฆฌ๊ณ ๊ถํ ์ค์ '์คํ ์ ๊ถํ'์ด ํฌํจ๋์ด ์์ผ๋ฉด ํด๋น ์ฝ๋๊ฐ ๋์ํด์ ์ฌ์ฉ์์๊ฒ ํ์ธ ์์ฒญ์ ํจ
(JIT ์ปดํ์ผ: ํ๋ก๊ทธ๋จ์ ์ค์ ์คํํ๋ ์์ ์ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๋ ์ปดํ์ผ ๊ธฐ๋ฒ)
๐ก ๋ฐ์ดํธ ์ฝ๋ : ์์ฑํ ์ฝํ๋ฆฐ ์ฝ๋๋ฅผ ๊ฐ์ ๋จธ์ ์ธ ์๋๋ก์ด๋ ๋ฐํ์์์ ์ดํดํ ์ ์๋๋ก ๋ณํํ ์ฝ๋
๐ก APK : ์๋๋ก์ด๋ ํจํค์ง(Android Package)์ ์ค์๋ง๋ก ์๋๋ก์ด๋ ์ค์น ํ์ผ์ ํ์ฅ์๋ช
์ผ๋ก ์ฌ์ฉ๋จ
ํน์ ์ฑ์ APK ํ์ผ์ด ์์ผ๋ฉด ์ค๋งํธํฐ์ ์๋์ผ๋ก ํด๋น ์ฑ์ ์ค์น ๊ฐ๋ฅ
๋น๋(Build)
- ์์ค ์ฝ๋๋ฅผ ๋ณํํด์ ์๋๋ก์ด๋์ ์คํ ํ์ผ์ธ APK ํ์ผ๋ก ๋ง๋๋ ๊ฒ
- ์์ค ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํํ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐ๊ฒฐํด์ ์ค์ ์คํ ํ์ผ๋ก ๋ง๋๋ ๊ณผ์ ์ ์ผ์ปซ๋ ์ฉ์ด
์๋๋ก์ด๋๋ ๋ฆฌ๋ ์ค ์ปค๋ ๊ธฐ๋ฐ์ด๋ฏ๋ก ๋ฆฌ๋ ์ค ์์คํ ์ ๋น๋๋ฅผ ์ดํดํ๋ ๊ฒ์ด ๋์ ๋จ
์ปดํ์ผ(Compile)
- ์ฌ๋์ด ์ฝ์ ์ ์๋ ํํ์ ์์ค ์ฝ๋๋ฅผ ์ปดํจํฐ๊ฐ ์ฝ์ ์ ์๋ ํํ์ ๊ธฐ๊ณ์ด๋ก ๋ณํํด์ฃผ๋ ๊ณผ์
- ์ปดํจํฐ๋ ๊ธฐ๊ณ์ด๋ง ์ดํดํ๊ณ ๋์ํ๋๋ฐ, ์ด ๊ธฐ๊ณ์ด์ ๊ตฌ์กฐ๋ฅผ ์ฌ๋์ด ์ดํดํ๋ ๊ฒ์ด ์ด๋ ค์ C, ์๋ฐ, ์ฝํ๋ฆฐ๊ณผ ๊ฐ์ ์ปดํจํฐ ์ธ์ด๊ฐ ์๊ฒจ๋ ๊ฒ
๋ฆฌ๋
์ค์์์ ๋น๋
- ์์ค ์ฝ๋๋ฅผ ์ปดํจํฐ๊ฐ ์ฝ์ ์ ์๋ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญ(์ปดํ์ผ)ํ๊ณ ,
๋ด๊ฐ ๋ง๋ ์์ค ์ฝ๋์์ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐ๊ฒฐ(Link)ํด์ ์ต์ข ์คํ ํ์ผ ํํ๋ก ๋ง๋๋ ๊ฒ
์๋๋ก์ด๋์์์ ๋น๋
- ๋ฆฌ๋ ์ค ์ปดํ์ผ๊ณผ์ ์ฐจ์ด์ : ์๋๋ก์ด๋์๋ ๋ฆฌ์์ค(Resource)๋ผ๋ ๊ฐ๋ ์ด ์กด์ฌ
- ์๋๋ก์ด๋๋ ์ปดํ์ผ ๋จ๊ณ (1+2๋จ๊ณ = ๋น๋ = apkํ์ผ ์์ฑ)
- (1๋จ๊ณ) ๋ฐ์ดํธ ์ฝ๋ ๋จ๊ณ
์์ค ์ฝ๋, ๋ฆฌ์์ค(์ด๋ฏธ์ง ํ์ผ, ์์ ํ์ผ ๋ฑ), ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊น์ง ํ ๋ฒ์ ์ปดํ์ผ
์ด ๋ ์์ฑ๋ ํ์ผ์ ์๋๋ก์ด๋ ํ๋ซํผ์์ ์ธ์ํ ์ ์๋ ๋ฐ์ดํธ์ฝ๋๋ก ์ปดํ์ผ
์ด ํ์ผ์ ์ค๋งํธํฐ์์ ๋ฐ๋ก ์คํํ ์ ์์
- (2๋จ๊ณ) APK ํ์ผ ์์ฑ ๋จ๊ณ
1๋จ๊ณ์์ ์์ฑ๋ ํ์ผ์ APK ๋งค๋์ ๋ผ๋ ๋๊ตฌ๋ก ๊ฐ๋ฐ์๊ฐ ์ค์ ํ ํจ์ค์๋์ ์กฐํฉ,
์ค์น ํ์ผ์ธ APK ํ์ผ๋ก ๋ง๋ค์ด ์ค
๐ก AAB : ์๋๋ก์ด๋๊ฐ ์๋กญ๊ฒ ์ ์ํ๋ APK ํ์ผ์ ๋์ฒดํ๋ ๋น๋ ํ์ผ ํํ
๊ตฌ๊ธ ํ๋ ์ด ์คํ ์ด์ AAB ํ์ผ ํํ๋ก ์ฑ์ ๋ฑ๋กํ๋ฉด, ์ฌ์ฉ์๊ฐ ์ฑ์ ๋ค์ด๋ก๋ ํ ๋ ์ฌ์ฉ์์ ๋๋ฐ์ด์ค์ ํ์ํ ๋ชจ๋๋ง ๊ณจ๋ผ์ APK ํ์ผ๋ก ๋ค์ ์์ฑ. ์๋ฅผ ๋ค์ด ์์ด, ์ผ๋ณธ์ด, ์ค๊ตญ์ด๋ฅผ ์ง์ํ๋ ์ฑ์ AAB ํ์ผ๋ก ๋ฑ๋กํ๋ฉด ๊ฐ ๋๋ฐ์ด์ค์ ํ์ํ ์ธ์ด ํ์ผ๋ง ๋ชจ์์ ์ค์น ๋๋๋ก ํด์ค
์ค์น์ ์คํ
- ์๋๋ก์ด๋์ ์ํคํ ์ฒ๋ ์ฑ ์ค์น๋ถํฐ ์คํ ํ ์ข ๋ฃํ ๋๊น์ง ๊ณ์ ๋ฐ๋ผ๋ค๋๋ฉด์ ๊ด์ฌ
- ์ฐ๋ฆฌ๊ฐ ์ค์นํ๋ ์ฑ์ด ๊ฐ์ฅ ์๋จ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์
์์ญ์์ ๋์ํ๊ณ ,
์๋๋ก์ด๋๋ ์ค๊ฐ์ ์๋ ์๋๋ก์ด๋ ๋ฐํ์ ์์ญ์์ ๊ฐ๋ฐ์๊ฐ ๋ง๋ ์ฑ์ ์ ์ด - AOT(Ahead of Time) ๊ตฌ์กฐ: ์ ๊ทธ๋ฆผ์ ์ฐ์ธก ์์์๋ถํฐ ์์๋๋ก ์ฑ์ ์ค์นํ๋ฉด ์ค์น ํ์ผ์ ์ผ๋ถ๊ฐ ๋ฆฌ๋ ์ค ์ด์์ฒด์ ์์ ์คํ ํ ์ ์๋ ํ์ผ ํํ๋ก ํ ๋ฒ ๋(์ด๋ฏธ ๋น๋ ์์ ํ ๋ฒ ์ปดํ์ผ๋ ์ํ) ์ปดํ์ผ
- ํ๋ซํผ ๋ฒ์ 5.0 ๋กค๋ฆฌํ๊น์ง๋ ์ด์ ๊ฐ์ด ๋ชจ๋ ํ์ผ์ด ์ค์น ์ ์ปดํ์ผ ๋๋ ํํ์๋ค๊ฐ ํจ์จ์ฑ์ ๋ฌธ์ ๋ก ์ผ๋ถ๋ง ์ปดํ์ผ๋๋ ํํ๋ก ๋ณ๊ฒฝ๋จ
- JIT(Just in Time) ๊ตฌ์กฐ: ์ฑ์ ์คํํ๋ฉด ํธ์ถ๋๋ ํ์ผ ์ค์์ ์ปดํ์ผ ๋์ง ์์๋ ํ์ผ์ด ํ ๋ฒ ๋ ์ปดํ์ผ ๋จ
- ์๋๋ก์ด๋๋ ์ด๋ ๊ฒ AOT์ JIT๋ผ๋ 2๊ฐ์ ์ปดํ์ผ ํํ๋ฅผ ๊ฐ์ด ์ฌ์ฉํจ์ผ๋ก์จ ํจ์จ์ฑ์ ๋์
๐ก์๋๋ก์ด๋๊ฐ ๋ ๋ฒ์ด๋ ์ปดํ์ผ์ ํ๋ ์ด์
(1) AOT ์ปดํ์ผ์ ํ๋ฉด ์ค์น ์ ๋ชจ๋ ์ปดํ์ผ ๋๋ฏ๋ก ์ฌ์ฉํ ๋ ์๋๋ ๋น ๋ฅด์ง๋ง,
์ปดํ์ผ๋ ํ์ผ๋งํผ ๋์คํฌ์ ์ฉ๋์ ์ฐจ์ง -> ๋ง์ ์ฑ์ ์ค์นํ ์ ์์
(2) ๋ฐ๋ฉด์ JIT ์ปดํ์ผ์ ํ๋ฉด ํธ์ถ ์ ์ปดํ์ผ ๋๋ฏ๋ก ์ ์ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์๋ ์์ง๋ง,
ํ ๋ฒ ์ปดํ์ผ๋ ์ดํ๋ก๋ AOT์ ๋์ผํ ์๋๋ฅผ ๋ด๊ณ , ๋์คํฌ์ ์ฉ๋์ ์ ๊ฒ ์ฐจ์ง
์ด ๋ ์ปดํ์ผ ๋ฐฉ์์ ๊ฐ๊ธฐ ์ฅ๋จ์ ์ด ์์ผ๋ฏ๋ก ์๋๋ก์ด๋๋ ์ํฉ์ ๋ง์ถฐ์ ์ปดํ์ผ์ ๋ ๋ฒ ํจ
3 ์๋กญ๊ฒ ๋ค๋ฃจ๋ ๊ฒ๋ค
์ ฏํฉ(Jetpack)
- ์๋๋ก์ด๋๋ ๋ชจ๋ ๋ฒ์ ๊ณผ ๊ธฐ๊ธฐ์์ ์ผ๊ด๋๊ฒ ๋์ํ๋ ์ ฏํฉ(Jetpack) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณต
- ์๋๋ก์ด๋ ๊ฐ๋ฐ์๋ค์ ์๋ง์ ํํธํ๋ก ์ธํด ๊ฐ๊ฐ์ ๋ฒ์ ๋ฐ ๊ธฐ๊ธฐ๋ณ๋ก ์ฌ๋ฌ ๋ฒ์ ์ ์ฝ๋๋ฅผ ์์ฑํด ์ด
- ์ด๋ฐ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด ์ ฏํฉ์ด ๊ฐ๋ฐ๋์๊ณ , ๊ฐ๋ฐ์๋ค์ ํ์ํ ๋ก์ง์๋ง ์ง์คํ ์ ์๊ฒ ๋จ
์ ฏํฉ์ ์ฌ์ฉํ๋ ์ด์
- ํ์ ๋ฒ์ ํธํ์ฑ
: ์ต์ ์ค๊ณ ๋ฐฉ์์ ๋ฐํ์ผ๋ก ๋น๋๋ ์ ฏํฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ ๊ธฐ๋ฅ์ด ํตํฉ๋์ด ๋น์ ์ ์ข ๋ฃ์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ค์ฌ์ค - ๋ฐ๋ณต๋๋ ์ฝ๋ ์ ๊ฑฐ
: ๊ฐ๋ฐ์๊ฐ ๋น์ฆ๋์ค ๋ก์ง์ ์์ฑํ๋ ๋ฐ ์ง์คํ ์ ์๋๋ก ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ , ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ ๋ฑ ๋ฐ๋ณต์ ์ด๊ณ ์ง๋ฃจํ ์ฝ๋๋ฅผ ์ ๊ฑฐ - ๋ฎ์ ๋ณต์ก๋
: ๋ชจ๋ ๋ฒ์ ๋ฐ ๊ธฐ๊ธฐ์์ ์ผ๊ด๋ ๋์์ผ๋ก ์ฝ๋์ ๋ณต์ก๋๋ฅผ ๋ฎ์ถฐ ์ค
์ ฏํฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์ ฏํฉ์ ์ฝ 90๊ฐ ์ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณต
- ์
๋ฌธ ๋จ๊ณ์์ ๊ผญ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
Collection
ConstraintLayout
Fragment
RecyclerView
ViewPager2
Preference
Room
๋ทฐ ๋ฐ์ธ๋ฉ(ViewBinding)
- ์๋๋ก์ด๋์์ ๋ทฐ ๊ฐ์ฒด์ ์ ๊ทผํ๊ธฐ ์ํด์๋ findViewById()๋ฅผ ์ฌ์ฉ
- ์๋๋ก์ด๋๋ findViewById๋ฅผ ๋จ์ณ๋ด๊ณ (deprecate) ๋ทฐ ๋ฐ์ธ๋ฉ์ ์ง์
์ฝ๋ฃจํด(Coroutine)
- ์คํ์ ์ผ์ ์ค๋จํ๊ณ ์ฌ๊ฐํ ์ ์๋๋ก ํด์
๋น์ ์ ํ ๋ฉํฐํ์คํน์ ์ํ ์๋ธ ๋ฃจํด์ ์ผ๋ฐํํ๋ ์ปดํจํฐ ํ๋ก๊ทธ๋จ ๊ตฌ์ฑ ์์ - ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ฌ์ฉ๋๋ ์ค๋ ๋(Thread)๋ฅผ ๊ฒฝ๋ํํ ๊ฒ (cf. ์ค๋ ๋๋ ์ ์ ํ ๋ฉํฐํ์คํน)
- ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅํ ์ฝ๋ฃจํด์ ๋ค๋ฅธ ์ธ์ด์์ ์ด๋ฏธ ์ฌ์ฉ๋๊ณ ์๋ ๊ฐ๋ ์ด๋ฉฐ, ์ด๋ฅผ Kotlin์ ๋์ ํ ๊ฒ
- ๊ธฐ์กด์ ์ค๋ ๋๋ ์ฝ๋ฃจํด์ ์ํด ์คํ ๊ฐ๋ฅํ ๊ณต๊ฐ์ ์ ๊ณตํ๋ ์ญํ ๋ง ํ๋ฉฐ,
ํ๋์ ์ค๋ ๋์ ์ฌ๋ฌ ๊ฐ์ ์ฝ๋ฃจํด์ด ์กด์ฌํ ์ ์๋๋ก ์ค๊ณ - 2๊ฐ ์ด์์ ์ฝ๋ฃจํด์ด ์์ ๋ ํ๋ก์ธ์ค ํ๋ฆ์ด ์ฝ๋ฃจํด 1์์ ์ฝ๋ฃจํด 2๋ก ๋ณ๊ฒฝ๋๋ค ํ๋๋ผ๋
๊ธฐ์กด ์ค๋ ๋์ ๋ณ๊ฒฝ์์ ๋ฐ์ํ ์ ์์๋ ์ฑ๋ฅ ์ ํ๋ ๋ฐ์ํ์ง ์์