๐ก ์๋๋ก์ด๋์์ ์์ฃผ ์ ํ๋ ์ปจํ ์คํธ์ ๋ํ์ฌ ํ์ตํ์์ต๋๋ค!
Context
- Context์ ์ฌ์ ์ ์ ์๋ ๋งฅ๋ฝ, ์ ํ ์ฌ์ ์ ์๋ฏธํ๋ฉฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํด์ ํ์ฌ ์ํ๋ฅผ ๋ํ๋ด๋ ์ญํ ์ ํฉ๋๋ค.
- ์๋ก ์์ฑ๋ ๊ฐ์ฒด๊ฐ ์ง๊ธ ์ด๋ค ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์ ์ ์๋๋กํ๋ฉฐ, ์กํฐ๋นํฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
Android Context
- ์๋๋ก์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ํ๊ฒฝ์ ๋ํ ๊ธ๋ก๋ฒ ์ ๋ณด๋ฅผ ๊ฐ์ง๋ ์ธํฐํ์ด์ค์ ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์
์ ํ์ฌ ์ํ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์์คํ
์๋น์ค์์ ์ ๊ณตํ๋ API์ ์ ๊ทผํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ฆฌ์์ค, DB, Shared Preferences
- Activity, Application Context๋ Android Context ํด๋์ค๋ฅผ ์์๋ฐ์ ์ฌ์ฉ๋ฉ๋๋ค.
Application Context
- Activity์์ applicationContext๋ผ๋ ํ๋กํผํฐ(or getApplicationContext())๋ฅผ ํตํด ์ป์ ์ ์๋ ์ฑ๊ธํค ์ธ์คํด์ค์ ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ๋จ ํ๋๋ง ์กด์ฌํฉ๋๋ค.
- ์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ผ์ดํ์ฌ์ดํด๊ณผ ๋ฌถ์ฌ์์ผ๋ฉฐ, ์๋์ ๊ฐ์ ์์
์ ์ฉ์ดํฉ๋๋ค.
- Context๊ฐ ์ข ๋ฃ๋๊ณ ๋์๋ Context๊ฐ ํ์ํ ์์
- ์กํฐ๋นํฐ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๊ณณ์์ Context๊ฐ ํ์ํ ์์
// ๋ก์ปฌ data๋ฅผ ์ ์ฅํ๋ addressModule๋ฅผ ํ์ฉํ ๋ context๋ฅผ ๋๊ฒจ์ฃผ์์ต๋๋ค.
// ์ด๋ ์ค๋ซ๋์ ์ง์๋๊ฑฐ๋ ์ฑ ์ ์ญ์์ ์ฌ์ฉ๋๋ฏ๋ก applicationContext๋ฅผ ํ์ฉํ์ต๋๋ค.
private val addressModule = AddressModule(context)
์๋ชป ๋ Context๋ฅผ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ
- ์ ํ๋ฆฌ์ผ์ด์
๋ด์ ์ฑ๊ธํค ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ Activity Context๋ฅผ ์ฃผ์
ํ๋ ๊ฒฝ์ฐ ๋ฐ์ํฉ๋๋ค.
- ์ด๋ฌํ ์ํฉ์ Activity Context๋ฅผ ๋๊ฒจ์ฃผ๋ฉด, Activity์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋จ๊ฒจ๋๊ฒ ๋๊ณ , GC ๋์ง ์์ ์ฑ ๋ฉ๋ชจ๋ฆฌ ๋ฆญ์ด ๋ฐ์ํฉ๋๋ค.
- [GC] : Carbage Collected๋ก ์ ํจํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํด์ค
- [๋ฉ๋ชจ๋ฆฌ ๋ฆญ] : ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ด ํ์ํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณ์ ์ ์ ํ๋ ํ์
- ์ค๋ซ๋์ ์ง์๋๊ฑฐ๋ ์ฑ ์ ์ญ์์ ์ฌ์ฉ๋ ๊ฒฝ์ฐ์๋ง Application Context๋ฅผ ํ์ฉํด์ผ ํฉ๋๋ค.
- ๋ฐ๋ผ์ ํ์ฌ์ ์ปจํ ์คํธ์ ๋ถ๋ฆฌ๋ ๋ผ์ดํ์ฌ์ดํด์ ๊ฐ์ง ์ปจํ ์คํธ๊ฐ ํ์ํ๊ฑฐ๋, ์กํฐ๋นํฐ์ ๋ฒ์๋ฅผ ๋์ด์ ์ปจํ ์คํธ๋ฅผ ์ ๋ฌํ ๋์ ์ฌ์ฉํฉ๋๋ค.
Activity Context
- Activity์์๋ง ์ฌ์ฉ๋๋ฉฐ Activity์ ์๋ช ์ฃผ๊ธฐ์ ๊ด๋ จ์ด ์๋ Context์ ๋๋ค.
// context -> context๋ก ์ด๋ํ ๊ฒฝ์ฐ์
๋๋ค.
// activity context๋ฅผ ํ์ฉํ์ฌ ์ด๋ํ๊ธฐ ์ ์ธ activity์ ์ ๋ณด๋ฅผ ๋๊ฒจ์ฃผ์์ต๋๋ค.
companion object {
fun getIntent(context: Context): Intent {
return Intent(context, ClubAddActivity::class.java)
}
}
- ์กํฐ๋นํฐ๊ฐ ํ๊ดด๋๋ฉด Context๊ฐ ์๋ฉธ๋๋ฉฐ, ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ๋ํ ์ ๊ทผ๊ณผ ์กํฐ๋นํฐ ๊ด๋ จ ์์ ์ ์ฌ์ฉ๋ฉ๋๋ค.
- Application Context๋ณด๋ค ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋นํ๊ณ , ์กํฐ๋นํฐ ์๋ช ์ฃผ๊ธฐ์ ์ํฅ์ ๋ฐ์ผ๋ฏ๋ก ์ฌ์ฉ ์ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค.
Application Context๋ฅผ ์ฌ์ฉํ๋ฉด ์๋๋ ๊ฒฝ์ฐ
- Application Context๋ Activity Context๊ฐ ์ง์ํ๋ ๋ชจ๋ ๊ฒ์ ์ง์ํ์ง ์์ต๋๋ค.
- GUI (View Component ๊ด๋ จ ๋์) ์์ Application Context๋ ์ค๋ฅ๋ฅผ ๋ฐ์ํ ํ๋ฅ ์ด ๋์ต๋๋ค.
- ex> Application Context๋ก AlertDialog๋ฅผ show()ํ ๊ฒฝ์ฐ
- Activity๋ Garbage Collection์ด ๊ฐ๋ฅํ์ง๋ง, Application Context๋ ์ฑ ํ๋ก์ธ์ค๊ฐ ์ด์์๋ ๋์ ๊ณ์ ๋จ์์์ต๋๋ค.
- ์ด๋ Application Context๋ฅผ ํ์ฉํ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ํ ๋น ํด์ ํ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํด์ ๋ฉ๋ชจ๋ฆฌ ๋ฆญ์ผ๋ก ์ด์ด์ง ํ๋ฅ ์ด ํฝ๋๋ค.
์์ง ์๊ฐ๋ฝ์ ๋ฒ์น
- ์์ง ์๊ฐ๋ฝ์ ๋ฒ์น(The Rule Of Thumb)์ ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ์ดํดํ๊ณ ํด๊ฒฐํ๊ณ ์ ํฉ๋๋ค.
- ํ์ฌ ์์ ์ค์ธ ๊ฒ์ ๋๋ฌ์ธ๋ ์ปดํฌ๋ํธ์์ ์ง์ ์ฌ์ฉํ ์ ์๋ ์ปจํ ์คํธ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- ์ฐธ์กฐ๊ฐ ํด๋น ์ปดํฌ๋ํธ์ ๋ผ์ดํ์ฌ์ดํด์ ๋์ด์์ง ์๋ ์ด์ ์ฐธ์กฐ๋ฅผ ์์ ํ๊ฒ ์ ์งํ ์ ์์ต๋๋ค.
Appication Context๊ฐ ์ง์ํ์ง ์๋ ๊ธฐ๋ฅ
- Application Context๋ UI ์์์ ์ง์ ์ ์ผ๋ก ๊ด๋ จ๋ ์์ ์ ์ง์ํ์ง ์์ต๋๋ค.
- Dialog, Toast, View ์์ฑ ๋ฑ์ ๋ก์ง์ Application Context๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ WindowManager ๊ด๋ จ ์ค๋ฅ๊ฐ ์๊ธธ ์ ์์ต๋๋ค.
- ์๋์ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์ ์ ํ์ง ์์ต๋๋ค !
- Activity ๋ฐ ํ๋ฉด ์ ํ ๊ด๋ จ ์์ ์ Application Context๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ
- ํน์ ๋ทฐ ์๋ช
์ฃผ๊ธฐ์ ์ฐ๊ฒฐ๋ ์์
- ex> ์ ๋๋ฉ์ด์ , ๋ทฐ ํธ๋ฆฌ ๋ฑ
์ ๋ฆฌ
- ํญ์ ๊ฐ์ฅ ๊ฐ๊น๊ณ ๋ฐ์ ํ ์ค์ฝํ์ Context๋ฅผ ๊ณจ๋ผ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ์กํฐ๋นํฐ ๋ด๋ถ์์๋ Activity Context๋ฅผ ํ์ฉํฉ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ญ(์ฑ๊ธํค)์์๋ Application Context๋ฅผ ํ์ฉํฉ๋๋ค.
์ฐธ๊ณ
https://velog.io/@haero_kim/Android-Context-๋-๋์ฒด-๋ญ์ผ
https://developer.android.com/reference/android/content/Context
https://shinjekim.github.io/android/2019/11/01/Android-context๋/