[Android ๊ธฐ์ดˆ] 1. ์•ˆ๋“œ๋กœ์ด๋“œOS์™€ ์ฝ”ํ‹€๋ฆฐ ๊ธฐ์ดˆ ๊ฐœ๋…
๋ฐ˜์‘ํ˜•

 

 


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 ๋ ˆ๋ฒจ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์„ ๋•Œ๋Š” ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ํ™•์ธํ•ด์•ผ ํ•จ
โ€‹โ€‹

2024.02.25. ๊ธฐ์ค€


โ—  ํ˜„์žฌ ํ”Œ๋žซํผ์˜ ์ตœ์‹  ๋ฒ„์ „์€ ์•ˆ๋“œ๋กœ์ด๋“œ 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๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค ํ•˜๋”๋ผ๋„
    ๊ธฐ์กด ์Šค๋ ˆ๋“œ์˜ ๋ณ€๊ฒฝ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ์„ฑ๋Šฅ ์ €ํ•˜๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ

 

๋ฐ˜์‘ํ˜•
 ๐Ÿ’ฌ C O M M E N T