์์น ์๋๋ก์ด๋ ๊ฐ์๋ ๊นก์์ ๊ฐ์ข๋ฅผ ๋ฃ๊ณ ์ ๋ฆฌํ ๋ด์ฉ์
1๊ฐ. ๋ชจ๋ฐ์ผ ์ฑ ๊ฐ๋ฐ
Native App
•Platform(OS)์ ์ข
์์ ์ธ ๊ธฐ์ ์ ์ด์ฉํ์ฌ ๊ฐ๋ฐ๋๋ App
•Android (Java, Kotlin), iOS(Objective-C, Swift) ๋ฑ์ผ๋ก ๊ฐ๋ฐ
•Platform ์ ์ต์ ํ ๋ ๊ธฐ์ ์ ์ด์ฉํจ์ผ๋ก ๋์ ํผํฌ๋จผ์ค์ ๋ค์ํ ๊ธฐ๋ฅ ๊ตฌํ ๊ฐ๋ฅ
๋จ์ : Kotlin ์ธ์ด๋ผ๋ ๊ฑธ ์๋ก ํ์ตํด์ผ ํ๊ณ , ์๋๋ก์ด๋์ ๊ธฐ์ ์ ํ์ตํ๊ณ ๋ง๋ ๋ค์
iOS์ฑ์ ์ํ ์ธ์ด/๊ธฐ์ ์ ์๋ก ํ์ตํด์ ๋ง๋ค์ด์ผ ํจ
๋ฐ๋ก๋ฐ๋ก ์ ์ง๋ณด์ -> ๊ฐ๋ฐ ์์ฐ์ฑ/์ ์ง๋ณด์์ฑ ๋จ์
์ฐธ๊ณ : ์ฌ์ ํ ๋ค์ดํฐ๋ธ ์ฑ ๊ฐ๋ฐํ๋ ๋ฒค๋๋ค ๋ง์(๊ธฐ๋ฅ ๋๋ฌธ)
Cross Platform App
•ํ๋์ ๊ธฐ์ ๋ก ๋ง๋๋ App (๋์ผ ์ฝ๋)
•HTML, CSS, Javascript, C#, Kotlin, Swift, Dart ๋ฑ
•ํ๋์ ๊ธฐ์ ๋ก ๋ค์ํ Platform ์ ์ํ ์ฑ์ ์์ฑํจ์ผ๋ก ๋์ ๊ฐ๋ฐ ์์ฐ์ฑ ๋ฐ ์ ์ง๋ณด์์ฑ
์ฐธ๊ณ : ํฌ๋ก์คํ๋ซํผ์ผ๋ก ์ฑ์ ๊ฐ๋ฐํ๋ค๊ณ ํ๋๋ผ๋, ๊ฐ๋ฐ์๋ ์๋๋ก์ด๋/iOS์ ๋ค์ดํฐ๋ธ ์ง์์ ์๊ณ ์์ด์ผ ํจ.
ํฌ๋ก์คํ๋ซํผ ํ๋ ์์ํฌ1: Ionic
•WebApp ๋ฐฉ์. (์๋๋ก์ด๋ ์น๋ทฐ, iOS UI์น๋ทฐ) ๋ฐํ์์ ์ฑ์ ๋ด์ฅ ๋ธ๋ผ์ฐ์ ์ ์ํด ์คํ. (html,css,js)
• ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ์ธ Angular, Vue ๋ฅผ ์ด์ฉํ ๊ฐ๋ฐ ํ๊ฒฝ ์ ๊ณต
• ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ํ ์ ์๋ ์ผ ๋๋ฌธ์ ๋ค์ดํฐ๋ธ์ ์ฐ๋ํ๋ ๊ธฐ์ ํ์: Cordova๋ฅผ ์ด์ฉํ Native Feature Access
•Nodejs ๊ธฐ๋ฐ ๊ฐ๋ฐํ๊ฒฝ
ํฌ๋ก์คํ๋ซํผ ํ๋ ์์ํฌ2: React Native
•React.js(์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ) ๊ธฐ๋ฐ์ Mobile Cross Platform Framework
•Javascript ๋ก App ๊ฐ๋ฐ (์ฐธ๊ณ : ์น์ฑ๋ฐฉ์ ์๋! ์ธ์ด๊ฐ JS์ผ ๋ฟ์)
•Runtime ์ JS ๊ฐ Javascript Environment ์ ์ํด ์คํ
•Native Code ์ ์ฐ๋
ํฌ๋ก์คํ๋ซํผ ํ๋ ์์ํฌ3: Flutter
•Dart ์ธ์ด๋ก ๊ฐ๋ฐ
•Cross Platform ์ ๋ชฉ์ ์์ผ๋ก Platform ์ ์ข
์์ ์ด์ง ์์ ์ธ์ด๊ฐ ํ์ํ๊ณ ๊ทธ๋ก ์ธํด Dart ์ฑํ.
•Runtime ์ Skia ๋ฅผ ์ด์ฉํด ํ๋ฉด ์ถ๋ ฅ
2๊ฐ. ์๋๋ก์ด๋ ์ฑ ๊ฐ๋ฐ
Android
•์๋๋ก์ด๋๋ ๊ณต๊ฐ ์ด์์ฒด์ ์ธ ๋ฆฌ๋
์ค ๊ธฐ๋ฐ์ด๋ค.
•์๋๋ก์ด๋ ์ฑ ๊ฐ๋ฐ์ ์๋ฐ ํน์ ์ฝํ๋ฆฐ ์ธ์ด๋ฅผ ์ด์ฉํด ๊ฐ๋ฐํ๋ค .
•์๋๋ก์ด๋ ํฐ์ ๊ตฌ๊ธ์์๋ง ๋ง๋๋ ๊ฒ์ด ์๋๋ผ ์ฌ๋ฌ ๋๋ฐ์ด์ค ์ ์กฐ ์
์ฒด์์ ๋ง๋ค ์ ์๋ค. (์ผ์ฑ ๋ฑ)
•์ฑ์ ๊ตฌ๊ธ ํ๋ ์ด์คํ ์ด๋ฅผ ํตํด์๋ง ๋ฐฐํฌ๋๋๊ฒ ์๋๋ผ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ ์ ์๊ฒ ๋ฐฐํฌํ ์ ์๋ค.
์ฒ์์ Java๋ง ์ ๊ณตํ์ผ๋, 2017๋
๋ ๊ตฌ๊ธ์์ Kotlin์ ๊ณต์ ์ธ์ด๋ก ์ง์ (๊ฐ๋ฐ์์ ์ทจ์ฌ ์ ํ)
Kotlin: IntelliJ๋ผ๊ณ ํ๋ IDE๋ฅผ ๋ง๋ JetBrains ์์ ๋ง๋ ์ํํธ์จ์ด ์ธ์ด (2011๋
๋)
1. ์๋ฐ๋ก ๋ง์ฝ์ ์ฑ์ ๊ฐ๋ฐํ๊ฒ ๋๋ฉด ์์คํ์ผ(ํ
์คํธํ์ผ) ~.java๊ฐ ์๊น
์ด๊ฑธ ์คํ์ํค๊ธฐ ์ํด์ ์ปดํ์ผ์ด๋ผ๋ ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋๊ณ , ์๋ฐ๊ฐ ์ปดํ์ผ ๋๋ฉด ~.class๊ฐ ๋ง๋ค์ด์ง
์ด๋ ๊ฒ ๋ง๋ค์ด์ง ํด๋์ค ํ์ผ์ JVM์ด๋ผ๊ณ ํ๋ ์๋ฐ ๋ฒ์ถ์ผ๋จธ์ ์ ์ํด ์คํ ๋จ
-> ์๋ฐ์ ์คํํ๊ฒฝ์ JVM์ด ์ ๊ณตํด ์ฃผ๋ ๊ฒ
2. ์ฝํ๋ฆฐ์ผ๋ก ๊ฐ๋ฐํ๊ฒ ๋๋ฉด ์์คํ์ผ์ด ~.kt ๊ฐ ์๊น
์ปดํ์ผ ์์ผ์ ๋๋ ค์ค์ผ ํ๋๋ฐ, ์ฝํ๋ฆฐ์ ๋
์ ์คํํ๊ฒฝ์ ์ ๊ณตํ์ง ์์
์ปดํ์ผํ๋ฉด ์๋ฐ์ ํด๋์ค์ธ ~.class๊ฐ ๋์ด JVM ํ๊ฒฝ์ผ๋ก ๋จ์ด์ง.
์๋ฐ ์ปดํ์ผ๋ฌ์ ์ฝํ๋ฆฐ ์ปดํ์ผ๋ฌ๋ ๋ค๋ฅด์ง๋ง, ๊ฒฐ๊ตญ ์คํํ๊ฒฝ์ JVM์ด ์ ๊ณตํด ์ค = JVM๋ฒ ์ด์ค์ ์ธ์ด
๊ฒฐ๊ตญ 1(์๋ฐ)์ 2(์ฝํ๋ฆฐ)์ ๋๊ฐ์ด JVM๋ฒ ์ด์ค์ ์ธ์ด
๊ฐ๋ฐํ์ด ๋๊ตฐ๊ฐ๋ ์๋ฐ๋ฅผ ์ด์ฉํด์ ๊ฐ๋ฐ์ ํ๊ณ , ์ฝํ๋ฆฐ์ผ๋ก ๋๊ตฐ๊ฐ๋ ๊ฐ๋ฐํ๋ ๊ฒ ๊ฐ๋ฅํ๊ฐ?
-> ๊ฐ๋ฅํ๋ค. ์ํํธ์จ์ด ์ธ์ด์ ๋ฌธ๋ฒ์ ์ฐจ์ด๊ฐ ์๋๊ฒ์ด์ง, ์ด์จ๋ ๋ฐํ์์ JVM์ผ๋ก ์คํํ๋ ๊ฒ์ด๋ค๋ณด๋
์๋ฐ๋ก ๋ง๋ ์ฝ๋ ๋ด์์ ์ฝํ๋ฆฐ์ผ๋ก ๋ง๋ ํด๋์ค๋ฅผ ํ์ฉํ ์ ์๊ณ , ๋ฐ๋๋ ๊ฐ์
์ฑ ๊ฐ๋ฐ์ ์ ์ง๋ณด์ ์ธก๋ฉด์์ ๋ดค์ ๋ ์ด๋ฏธ ์๋ฐ๋ก ๋ง๋ค์ด์ง ์ฑ์์ ์ฝํ๋ฆฐ์ผ๋ก ๊ธฐ๋ฅ ์ถ๊ฐ ๊ฐ๋ฅ!
์๋๋ก์ด๋ ์ฑ ๊ฐ๋ฐํ ๋ ์๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ,API,์คํ์์ค ํ์ฉํด์ ๊ฐ๋ฐ์ ํ๊ฒ ๋๋๋ฐ
ํ๋ซํผ์์ ์ ๊ณต๋๋ API๊ฐ ์๋ฐ๊ณ , ์คํ์์ค๊ฐ ์๋ฐ์ธ๋ฐ ์ฝํ๋ฆฐ์ผ๋ก ์ฑ ๊ฐ๋ฐ๋ ์ผ๋ง๋ ์ง ๊ฐ๋ฅํ๋ค.
Platform Architecture
์์์ ์์ '์๋๋ก์ด๋ ํ๋ซํผ์ด ์ค๊ณ๋ ๊ตฌ์กฐ๋ ์ด๋ ๊ตฌ๋' ์ ๋ ์ดํด๋ง ํ๋ฉด ๋จ
- ๋ฆฌ๋
์ค ๊ธฐ๋ฐ OS - Linux Kernel
- ์๋๋ก์ด๋ ๋ฒ์ถ์ผ๋จธ์ ART(android runtime)
- ์ด ๋ฒ์ถ์ผ๋จธ์ ์์ ์ ๊ณตํ๊ณ ์๋ ์จ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ = ํ๋ซํผ์์ ์ ๊ณต๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํน์ API, Java API Framework
์ฐธ๊ณ : ART๋ JVM์ด ๋ญ ์ฐจ์ด๋. ์ฐ๋ฆฌ๊ฐ ์ง์ ์คํ์ ํ ๋๋ JVM์ ์ฐ์ง๋ง, ์ฑ์ ๋ง๋ค์ด์ ๋ฐฐํฌํ ๋๋ ํด๋์ค ํ์ผ์ ๋ง๋ค์ด์ ์ง์ ๋ฐฐํฌํ๋ ๊ฒ ์๋๋ผ, class -> dex๋ผ๋ ํ์ผ ํฌ๋งท์ผ๋ก ๋ณํ๋์ด์ ์ฑ์ ๋ค์ด๊ฐ๊ฒ ๋จ.
์ด dex๋ผ๋ ํ์ผ ํฌ๋งท์ ํด์ํด์ ๋๋ ค์ฃผ๋ ๊ฑด ART๋ผ๋ ๋ฒ์ถ์ผ ๋จธ์ .
Android Version
์๋๋ก์ด๋ ๋ฒ์ (OS๋ฒ์ ) | ์ฝ๋๋ค์ | API Level | ๋ ์ง |
Android 5.x | Lollipop | 21~22 | 2014๋ |
Android 6.x | Marshmallow | 23 | 2015๋ |
Android 7.x | Nougat | 24~25 | 2016๋ |
Android 8.x | Orao | 26~27 | 2017๋ |
Android 9.0 | Pie | 28 | 2018๋ |
Android 10 | Q | 29 | 2019๋ |
Android 11 | R | 30 | 2020๋ |
Android 12 | S | 31 | 2021๋ |
Android 13 | Tiramisu | 33 | 2022๋ |
Android 14 | Upside Down Cake | 34 | 2023๋ |
๊ฐ๋ฐ์๋ ๋ณดํต API Level๋ก ๋ฒ์ ์ ์๊ธฐํจ
์ฌํ๋ฉด ์ฝ๋ ๋ด์์ ๋ฒ์ ๊ฐ์ง๊ณ if๋ฌธ์ ๊ฑฐ๋ ๊ฒฝ์ฐ๋ ์๋๋ฐ, if๋ฌธ ์์์ ๋ช
์ํ ๋๋ API๋ ๋ฒจ๋ก ๋ช
์ํ๊ธฐ ๋๋ฌธ.