Android/Android์˜ ๋ชจ๋“  ๊ฒƒ

๐Ÿ‘‹Android์˜ ๋ชจ๋“  ๊ฒƒ : 1๏ธโƒฃSharedPreference, 2๏ธโƒฃDataStore

DevGoni 2022. 3. 21. 09:58
728x90

https://goni95.tistory.com/173

 

๐Ÿ‘‹Android์— ๋ชจ๋“  ๊ฒƒ ๊ฐœ๋…

๋ชฉ  ์ฐจ ์˜ˆ์ œ Android ๐Ÿ‘‹Android์— ๋ชจ๋“  ๊ฒƒ : 1๏ธโƒฃAndroid, 2๏ธโƒฃAndroid SDK, 3๏ธโƒฃPlatform Architecture ๐Ÿ‘‹Android์— ๋ชจ๋“  ๊ฒƒ ๊ฐœ๋… : 1๏ธโƒฃApp Manifest, 2๏ธโƒฃAndroid Context, 3๏ธโƒฃApp Components ๐Ÿ‘‹Androi..

goni95.tistory.com

 

1๏ธโƒฃSharedPreference

SharedPreference๋Š” DB๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์—” ๋ถ€๋‹ด์Šค๋Ÿฌ์šด ๊ฐ„๋‹จํ•œ ์„ค์ • ๊ฐ’ ๋˜๋Š” ๋ฌธ์ž์—ด ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ๋กœ์ปฌ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋กœ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ํŒŒ์ผ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด(data/data/ํŒจํ‚ค์ง€๋ช…/shared_prefs/SharedPreference๋ช….xml)์— ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ญ์ œํ•˜๋ฉด ํ•ด๋‹น ํŒŒ์ผ๋„ ํ•จ๊ป˜ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

 

Google์—์„œ SharedPreference ๋Œ€์‹  Datastore๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ ๊ทน ๊ถŒ์žฅํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์ œ ๋Œ€์‹  ์‚ฌ์šฉ๋ฒ•๋งŒ ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

SharedPreference ๋‹จ์ 

  1. ์‹ค์ œ XML ํŒŒ์ผ I/O ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— UI Thread์—์„œ ์ž‘์—…ํ•  ๊ฒฝ์šฐ ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค.
  2. Runtime Exception์œผ๋กœ ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค.
  3. XML ํŒŒ์ผ์ด๊ธฐ์— ์™ธ๋ถ€์—์„œ ์‰ฝ๊ฒŒ ํŒŒ์ผ์„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค. (Datastore๋„ ๋™์ผ)
  4. ๋น„๋™๊ธฐ API๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ Listener๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๊ฐ’์„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.
  5. *type safety๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

SharedPreference ์œ ํ˜•

getPreferences(int mode) : ๋ณ„๋„์˜ ํŒŒ์ผ๋ช…์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ์ž๋™์œผ๋กœ ํ˜ธ์ถœํ•œ ์•กํ‹ฐ๋น„ํ‹ฐ ์ด๋ฆ„์˜ ํŒŒ์ผ ๋‚ด์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ•˜๋‚˜์˜ ํŒŒ์ผ์„ ๋‹ค๋ฃฐ ๊ฒƒ์ด๋ผ๋ฉด ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ธ์Šคํ„ด์Šค๋ฅผ ์–ป์–ด์˜ค๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

getSharedPreferences(String name, int mode) : ํŒŒ์ผ๋ช…์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ง€์ •ํ•˜์—ฌ XML ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ €์žฅํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ์ผ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ธ์Šคํ„ด์Šค๋ฅผ ์–ป์–ด์˜ค๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์œ„์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด SharedPreference์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์–ป๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ mode๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊ฒจ์•ผ ํ•˜๋Š”๋ฐ, Context๋ฅผ ํ†ตํ•ด ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

3๊ฐ€์ง€ mode๊ฐ€ ์žˆ์ง€๋งŒ ์™ธ๋ถ€ ์•ฑ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•˜๋Š” mode์ธ MODE_WORD_READABLE / WRITEABLE๋Š” ๋ณด์•ˆ์ƒ์˜ ์ด์œ ๋กœ Android 4.2 (JELLYBEAN_MR1 : API 17) ๋ถ€ํ„ฐ deprecation ๋˜์—ˆ๊ณ  ์•ฑ ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ MODE_PRIVATE๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

SharedPreference๋กœ ๋ฐ์ดํ„ฐ ์ €์žฅ

ํ•˜๋ ค๋ฉด SharedPreference ์ธ์Šคํ„ด์Šค๋กœ ๋ถ€ํ„ฐ Editor ํด๋ž˜์Šค์˜ ํ•จ์ˆ˜์ธ edit()๋ฅผ ํ†ตํ•ด Editor ๊ฐ์ฒด๋ฅผ ์–ป์–ด์™€ put***() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ key, value๋ฅผ ๋„˜๊ฒจ ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ ํ›„ SharedPreference์˜ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์„ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ commit(), apply() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

commit() ๋ฉ”์„œ๋“œ๋Š” ํ˜ธ์ถœ ์‹œ ์Šค๋ ˆ๋“œ๋ฅผ block ์‹œํ‚ค๊ณ  ์ปค๋„์—์„œ ์ €์žฅ์ด ์™„๋ฃŒ๋˜๋ฉด Boolean์„ ๋ฆฌํ„ดํ•˜๋ฉด์„œ block์„ ํ•ด์ œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ๊ฐ’์ด ํ•„์š”ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด apply() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

 

SharedPreference์˜ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ

SharedPreference์˜ ์ธ์Šคํ„ด์Šค๋กœ ๋ถ€ํ„ฐ get***(String key, Type value) ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ key, defaultValue๋ฅผ ๋„˜๊ฒจ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

SharedPreference์˜ ๋ฐ์ดํ„ฐ ์‚ญ์ œ(ํŠน์ • ๋ฐ์ดํ„ฐ / ๋ชจ๋“  ๋ฐ์ดํ„ฐ)

ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด Editor ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด remove(String key) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๊ณ , ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด Editor ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด clear() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ ํ›„ SharedPreference์˜ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์„ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ commit(), apply() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


 

 

Datastore๋ฅผ ํ•œ๋ฒˆ ๊ณต๋ถ€ํ•ด๋ณผํ…๋ฐ ์šฐ์„  ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ ๋กœ์ปฌ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ Datastore, SharePreferences, Room ๋“ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ๊ณผ ๋ถ€๋ถ„ ์—…๋ฐ์ดํŠธ, *์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์„ ์ง€์›ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ์—๋Š” Room์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ข‹๊ณ , Datastore๋Š” ์†Œ๊ทœ๋ชจ ๋‹จ์ˆœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ ์ ํ•ฉํ•˜๋ฉฐ ์—…๋ฐ์ดํŠธ๋‚˜ *์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์€ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

2๏ธโƒฃDataStore

Jetpack Datastore๋Š” *ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‚ค-๊ฐ’ ์Œ ๋˜๋Š” ์œ ํ˜•์ด ์ง€์ •๋œ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ์†”๋ฃจ์…˜ ์ž…๋‹ˆ๋‹ค. Datastore๋Š” Kotlin Coroutine ๋ฐ Flow๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ์ ์ด๊ณ  ์ผ๊ด€๋œ ํŠธ๋žœ์žญ์…˜ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

 

Datastore ์œ ํ˜•

Preferences Datastore : ๋ฐ์ดํ„ฐ๋ฅผ ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฏธ๋ฆฌ ์ •์˜๋œ ์Šคํ‚ค๋งˆ๊ฐ€ ํ•„์š”ํ•˜์ง„ ์•Š์ง€๋งŒ *type safety๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

Proto Datastore : ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ๋ฐ์ดํ„ฐ(custom data type)๋ฅผ ์ €์žฅํ•˜๊ณ  *ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•ด ์Šคํ‚ค๋งˆ๋ฅผ ์ •์˜ํ•ด์•ผ ํ•˜์ง€๋งŒ *type safety๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

Datastore ์žฅ์ 

  1.  Proto Datastore์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ *type safety๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  2.  ๋น„๋™๊ธฐ API๋กœ *Coroutine Flow๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ๊ณ , ์“ฐ๊ธฐ์— ๋Œ€ํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  3.  ๊ธฐ๋ณธ์ ์œผ๋กœ Datastore๋Š” ์ž‘์—…์„ Dispatchers.IO์— ์ „๋‹ฌํ•ด Dispatchers.IO๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” *์Šค๋ ˆ๋“œํ’€(Thread Pool) ๋‚ด์˜ ์Šค๋ ˆ๋“œ์˜ ๋ถ€ํ•˜ ์ƒํ™ฉ์— ๋งž์ถฐ ์ž‘์—…์„ ๋ฐฐ๋ถ„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— UI Thread์—์„œ ํ˜ธ์ถœํ•ด๋„ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.
  4.  Error ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ณ , ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ๋กœ ๋ถ€ํ„ฐ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.
  5.  ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํŠธ๋žœ์žญ์…˜ API๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  6.  SharedPreference๋ฅผ Datastore๋กœ *migration ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ž‘์—… ์ค‘์ธ ํ”„๋กœ์ ํŠธ์—์„œ ๋Œ€์ฒดํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜์˜ SharedPreference๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ ๋“ค์„ ๋ณด์™„ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์‹ค์ œ XML ํŒŒ์ผ I/O ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— UI Thread์—์„œ ์ž‘์—…ํ•  ๊ฒฝ์šฐ ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค.
  2. Runtime Exception์œผ๋กœ ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค.
  3. XML ํŒŒ์ผ์ด๊ธฐ์— ์™ธ๋ถ€์—์„œ ์‰ฝ๊ฒŒ ํŒŒ์ผ์„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค. (Datastore๋„ ๋™์ผ)
  4. ๋น„๋™๊ธฐ API๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ Listener๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๊ฐ’์„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.
  5. *type safety๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

์˜ˆ์ œ

ํ˜„์žฌ ์ œ๊ฐ€ ๊ตฌํ˜„ํ•˜๋ ค๋Š” ๊ฒƒ์€ ๋ฌธ์ž์—ด์„ ์ €์žฅํ•˜๋ ค๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— Preferences DataStore๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

1.

 

2.

 

3.

 

4.

 

5.

 


 

 

 

*์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ : ๊ธฐ๋ณธํ‚ค์™€ ์™ธ๋ž˜ํ‚ค์™ธ๋ž˜ ํ‚ค ๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ํ•ญ์ƒ ์œ ์ง€๋˜๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์กฐ๋˜๋Š” ํ…Œ์ด๋ธ”์˜ ํ–‰์„ ์ด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์™ธ๋ž˜ ํ‚ค๊ฐ€ ์กด์žฌํ•˜๋Š” ํ•œ ์‚ญ์ œ๋  ์ˆ˜ ์—†๊ณ , ๊ธฐ๋ณธํ‚ค๋„ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ์‹ค์ˆ˜๋กœ ๊ด€๋ จ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ์ˆ˜์ •๋˜๋Š” ๊ฒƒ์„ ๋ง‰์•„์ค๋‹ˆ๋‹ค.

 

*ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ : ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง๋ ฌํ™”ํ•˜๊ธฐ ์œ„ํ•œ Google์˜ ์–ธ์–ด์™€ ํ”Œ๋žซํ””์— ์ค‘๋ฆฝ์ ์ด๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. XML์„ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋” ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๊ณ  ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ•œ ๋ฒˆ ์ •์˜ํ•œ ๋‹ค์Œ, ์ƒ์„ฑ๋œ ํŠน์ˆ˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ๊ณผ ๋‹ค์–‘ํ•œ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•ด ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์“ฐ๊ณ  ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง๋ ฌํ™” ํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋ผ๊ณ  ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

*type safety : Type Check๋ฅผ ํ•  ์ˆ˜ ์žˆ์–ด Runtime์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ๋ฌธ์ œ๋ฅผ ์žก์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค.

 

*์Šค๋ ˆ๋“œํ’€(Thread Pool) : ์ž‘์—… ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ๋˜๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ์ œํ•œ๋œ ๊ฐœ์ˆ˜๋งŒํผ ์ •ํ•ด๋†“๊ณ  ์ž‘์—… ํ์— ๋“ค์–ด์˜ค๋Š” ์ž‘์—…๋“ค์„ ํ•˜๋‚˜์”ฉ ์Šค๋ ˆ๋“œ๊ฐ€ ๋งก์•„ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ž‘์—…์ฒ˜๋ฆฌ ์š”์ฒญ์ด ํญ์ฆ๋˜์–ด๋„ ์•ž์—์„œ ๋งํ–ˆ๋“ฏ ์Šค๋ ˆ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ œํ•œํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šค๋ ˆ๋“œ์˜ ์ „์ฒด ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜์ง€ ์•Š์•„ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์ด ๊ธ‰๊ฒฉํžˆ ์ €ํ•˜๋˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

 

*migration : ํ•œ ์šด์˜ํ™˜๊ฒฝ์œผ๋กœ ๋ถ€ํ„ฐ ์ข€ ๋” ๋‚ซ๋‹ค๊ณ  ์—ฌ๊ฒจ์ง€๋Š” ๋‹ค๋ฅธ ์šด์˜ํ™˜๊ฒฝ์œผ๋กœ ์˜ฎ๊ฒจ๊ฐ€๋Š” ๊ณผ์ •์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

 

*Coroutine Flow : ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐœํ–‰ํ•˜๋Š” ๋ฐœํ–‰์ž๊ฐ€ ๋ฐ์ดํ„ฐ์˜ ์†Œ๋น„์ž์—๊ฒŒ ์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ(๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ)ํ•˜๋ฉฐ, Coroutine ์ƒ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์†ํ•ด์„œ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์ธ ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์„ฑ์š”์†Œ์ž…๋‹ˆ๋‹ค.