๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[Android] Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปดํŒŒ์ผ ๋ฐ ํŒจํ‚ค์ง• ๊ณผ์ •

์ถœ์ฒ˜ 

ChatGPT


Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปดํŒŒ์ผ ๋ฐ ํŒจํ‚ค์ง• ๊ณผ์ •

1. ์†Œ์Šค ์ฝ”๋“œ ์ž‘์„ฑ

  • Java ๋˜๋Š” Kotlin์œผ๋กœ ์•ฑ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  • Java ํŒŒ์ผ์€ '.java'๋กœ, Kotlin ํŒŒ์ผ์€ '.kt'๋กœ ์ €์žฅ๋œ๋‹ค.

 

2. ์ปดํŒŒ์ผ

  • Java ์ปดํŒŒ์ผ๋Ÿฌ ๋˜๋Š” Kotlin ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•ด ์†Œ์Šค ์ฝ”๋“œ๋ฅผ JVM ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค.
  • Java ์ปดํŒŒ์ผ๋Ÿฌ('javac')๋Š” '.java' ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•ด '.class' ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.
  • Kotlin ์ปดํŒŒ์ผ๋Ÿฌ('kotlinc')๋Š” '.kt' ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•ด '.class' ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.
Java Source (.java) → Java Compiler → Java Bytecode (.class)
Kotlin Source (.kt) → Kotlin Compiler → Java Bytecode (.class)

 

3. ๋ฐ”์ดํŠธ์ฝ”๋“œ ๋ณ€ํ™˜ (DEX ๋ณ€ํ™˜)

  • '.class' ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋œ JVM ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” Android ํ”Œ๋žซํผ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋„๋ก DEX(Dalvik Executalbe) ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜๋œ๋‹ค.
  • ์ด ๋ณ€ํ™˜ ์ž‘์—…์€ Android SDK์˜ D8 ๋˜๋Š” R8 ๋„๊ตฌ์— ์˜ํ•ด ์ˆ˜ํ–‰๋œ๋‹ค.
  • DEX ํฌ๋งท์€ Android์˜ Dalvik VM ๋ฐ ART(Android Runtime)์—์„œ ์‹คํ–‰๋˜๋„๋ก ์ตœ์ ํ™”๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ ํ˜•์‹์ด๋‹ค.
Java Bytecode (.class) → DEX Compiler (D8/R8) → Dalvik Executable (.dex)

 

4. APK ํŒจํ‚ค์ง•

  • DEX ํŒŒ์ผ๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฆฌ์†Œ์Šค(์ด๋ฏธ์ง€, XML ๋ ˆ์ด์•„์ˆ˜, ๋ฌธ์ž์—ด ๋“ฑ), ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ, ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ์ด ํฌํ•จ๋˜์–ด APK(Android Package) ํŒŒ์ผ๋กœ ํŒจํ‚ค์ง•๋œ๋‹ค.
  • APK ํŒŒ์ผ์€ Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ตœ์ข… ๋ฐฐํฌ ํŒจํ‚ค์ง€๋กœ, ๋ชจ๋“  ์• ํ”„๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ํฌํ•จ๋œ๋‹ค.
Dalvik Executable (.dex) + Resources + Native Libraries → APK

 

5. ๋””๋ฐ”์ด์Šค์— ์„ค์น˜ ๋ฐ ์‹คํ–‰

  • ์ตœ์ข… APK ํŒŒ์ผ์€ Android ๋””๋ฐ”์ด์Šค์— ์„ค์น˜๋˜๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
  • ์„ค์น˜๋œ ์•ฑ์€ Android Runtime์—์„œ DEX ํŒŒ์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.
  • Android Runtime(ART)๋Š” ์„ค์น˜ ์‹œ์ ์— AOT(Ahead-Of-Time) ์ปดํŒŒ์ผ์„ ์ˆ˜ํ–‰ํ•ด ์•ฑ์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•œ๋‹ค.

 

์ฃผ์š” ํˆด๊ณผ ๊ธฐ์ˆ 

Android Studio

  • Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ IDE๋กœ, Kotlin๊ณผ Java๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•œ๋‹ค. 
  • Android Studio๋Š” ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ, ๋””๋ฒ„๊น…, UI ๋””์ž์ธ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ฐœ๋ฐœ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

 

Gradle ๋นŒ๋“œ ์‹œ์Šคํ…œ

  • Android Studio๋Š” Gradle์„ ์‚ฌ์šฉํ•ด ํ”„๋กœ์žญํŠธ ๋นŒ๋“œ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.
  • Gradle์€ ์ปดํŒŒ์ผ, ๋ฆฌ์†Œ์Šค ํŒจํ‚ค์ง•, ํ…Œ์ŠคํŠธ, ์ตœ์ ํ™” ๋“ฑ ์ „์ฒด ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•œ๋‹ค.

 

D8/R8

  • D8์€ Android SDK์˜ ๊ธฐ๋ณธ DEX ์ปดํŒŒ์ผ๋Ÿด๋กœ, '.class' ํŒŒ์ผ์„ DEX ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
  • R8์€ ProGuard์™€ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” DEX ์ปดํŒŒ์ผ๋Ÿฌ๋กœ, ์ฝ”๋“œ ์ตœ์ ํ™”์™€ ๋‚œ๋…ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

AOT์™€ JIT

  • AOT(Ahead-Of-Time) ์ปดํŒŒ์ผ : ART(Android Runtime)์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์น˜ ์‹œ ๋ฏธ๋ฆฌ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ด ์‹คํ–‰ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.
  • JIT(Just-In-Time) ์ปดํŒŒ์ผ : ์‹คํ–‰ ์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ตœ์ ํ™”ํ•ด ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•œ๋‹ค. ์ฃผ๋กœ Dalvik VM์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.

 

๊ฒฐ๋ก 

 

  • Java์™€ Kotlin ์ปดํŒŒ์ผ: Android Studio์—์„œ Java์™€ Kotlin ์ฝ”๋“œ๋ฅผ ๊ฐ๊ฐ JVM ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•œ ํ›„, DEX ๋ณ€ํ™˜์„ ํ†ตํ•ด Android์— ์ตœ์ ํ™”๋œ ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
  • APK ์ƒ์„ฑ ๋ฐ ๋ฐฐํฌ: ๋ณ€ํ™˜๋œ DEX ํŒŒ์ผ๊ณผ ๋ฆฌ์†Œ์Šค ํŒŒ์ผ๋“ค์ด APK๋กœ ํŒจํ‚ค์ง•๋˜์–ด, ์ตœ์ข…์ ์œผ๋กœ Android ๋””๋ฐ”์ด์Šค์— ์„ค์น˜๋˜๊ณ  ์‹คํ–‰๋œ๋‹ค.
  • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ์ค‘์š”์„ฑ: Android Studio์™€ Gradle ๋นŒ๋“œ ์‹œ์Šคํ…œ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์™€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ํšจ์œจ์ ์ธ ์•ฑ ๊ฐœ๋ฐœ์„ ์ง€์›ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ, Android ์•ฑ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ Kotlin๊ณผ Java์˜ ํ†ตํ•ฉ๋œ ๋นŒ๋“œ ๋ฐ ์‹คํ–‰ ๊ณผ์ •์€ Android Studio๋ฅผ ํ†ตํ•ด ํšจ์œจ์ ์ด๊ณ  ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌ๋œ๋‹ค.