Context !?
- ์ดํ๋ฆฌ์ผ์ด์
ํ๊ฒฝ์ ๊ดํ ์ ์ฒด ์ ๋ณด๋ฅผ ๋ฐ์ ์ ์๋ ์ถ์ ํด๋์ค.
- ์กํฐ๋นํฐ, ๋ธ๋ก๋์บ์คํธ, ์๋น์ค๋ฅผ ์์ํ ๋๋ ์ฌ์ฉ๋๊ณ ๋ฆฌ์์ค์ ์ ๊ทผํ ๋์๋ context๊ฐ ์ฌ์ฉ๋๋ค.
- ์ดํ๋ฆฌ์ผ์ด์
๊ณผ ๊ด๋ จ๋ ์ ๋ณด์ ์ ๊ทผํ๊ณ ์ ํ๊ฑฐ๋ ์ดํ๋ฆฌ์ผ์ด์
๊ณผ ์ฐ๊ด๋ ์์คํ
๋ ๋ฒจ์ ํจ์๋ฅผ ํธ์ถํ๊ณ ์ ํ ๋ context๊ฐ ํ์ํ๋ค.
- ์๋๋ก์ด๋๋ ์ดํ๋ฆฌ์ผ์ด์
๊ด๋ จ ์ ๋ณด๋ฅผ ActivityManagerService์์ ๊ด๋ฆฌํ๊ณ ์๊ณ , ์ดํ๋ฆฌ์ผ์ด์
๊ณผ ๊ด๋ จ๋ ์ ๋ณด์ ์ ๊ทผํ๋ ค ํ ๋ ํด๋น ์ดํ๋ฆฌ์ผ์ด์
์ ๋ํ ์๋ณ์๊ฐ ํ์ํ๋ฐ ๊ทธ ์ญํ ๋ ํ๋ค.
ContextWrapper & ContextImpl
- Context๋ ์ถ์ ํด๋์ค์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๊ตฌํ์ฒด๊ฐ ์์ด์ผ ํ๋ค.
- ๊ธฐ๋ณธ ๊ตฌํ์ฒด๋ ContextImpl์ด๊ณ , ์ด ๊ตฌํ์ฒด๋ ์ฌ์ฉ์์๊ฒ ๋
ธ์ถํ์ง ์๊ณ ContextWrapper๋ก ๊ฐ์ธ์ ธ ์๋ค.
๐ ์ฐธ๊ณ ์ฌํญ
- ContextImpl ํด๋์ค๋ ์ฑ์์ ์ง์ ์ฌ์ฉํ ์ ์๋ ํด๋์ค๊ฐ ์๋๊ธฐ์ ์์ค์ฝ๋๋ก๋ง ํ์ธ์ด ๊ฐ๋ฅํ๋ค.
- ์์ผ๋ก Context์ ๊ตฌํ์ฒด๋ผ๋ ๋ง์ ContextWrapper๊ฐ wrappingํ๋ Context ๊ตฌํ์ฒด๊ฐ ContextImpl์ด ์๋ ์ ์๊ธฐ์ ContextImpl๊ณผ์ ์ฉ์ด ๊ตฌ๋ถ์ ์ํด Context ๊ตฌํ์ฒด๋ผ๊ณ ํ๋ค.
Context ํด๋์ค ๊ตฌ์กฐ
ContextWrapper ํด๋์ค๋ ์์ฑ์๋ก context๊ตฌํ์ฒด๋ฅผ ๋ฐ์์ context๋์์ context๊ตฌํ์ฒด์ ๋์์ผ๋ก ์์ํ๋ค. (์๋๋ฅผ ๋ณด์.)
์ฆ, ContextWrapper๋ฅผ ์์ํ๋ Activity, Service, Application๊ณผ ๊ฐ์ ์ปดํฌ๋ํธ์์ ContextWrapper์ ํจ์๋ฅผ ํธ์ถํ๋ฉด Context ๊ตฌํ์ฒด์ ๋์์ ์ํํ๊ฒ ํ๋ ๊ฒ์ด๋ค.
๐ ContextWrapper๊ฐ Context์ ๊ตฌํ์ฒด์ ๋์์ ์ํํ๋ค.
์ด๋ฅผ Proxy ํจํด์ด๋ผ๊ณ ํ๋๋ฐ, ์ด ํจํด์ ์ฌ์ฉํ๋ฉด Context ๊ตฌํ์ฒด์ ์ด๋ฅผ ์ฌ์ฉํ๋ ์ชฝ์ ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ ธ ์ฝ๊ฒ Context๊ตฌํ์ฒด๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
ContextWrapper๋ก ๊ตฌํ๊ฐ๋ฅํ ๊ฑด ์๋์ ๊ฐ์ด ContextWrapperํด๋์ค๋ฅผ ์ด์ด๋ณด๋ฉด ์ ์ ์๋ค.
๊ทธ๋์ ContextWrapper๋ ์์ฑ์๋ก Context ๊ตฌํ์ฒด๋ฅผ ๋ฐ๊ณ , Context์ ๋ชจ๋ ๋์์ Context ๊ตฌํ์ฒด์ ํจ์๋ก ์์์ ํ๋ค.
์ด ๊ตฌ์กฐ๊ฐ ์ข์ ์ ์ ์์ ๋งํ๋ฏ Context ๊ตฌํ์ฒด๋ฅผ ๋ฐ๊พธ์ด๋ Context๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ ๋ณ๊ฒฝ๋์ง ์์๋ ๋๋ค๋ ๊ฒ์ด๋ค.
ContextWrapper์์ Context๊ตฌํ์ฒด๋ฅผ ๋ฐ๊พธ๋ ๋ฉ์๋๋ attachBaseContext(Context base)
์ด๋ค.
ContextImpl ์ฝ๋๋ฅผ ๋ณด๊ณ ์ถ๋ค๋ฉด ์ฌ๊ธฐ๋ฅผ ๋ณด์.
Context์ ์ข
๋ฅ
์์ Context ๊ตฌ์กฐ์์ ๋ณผ ์ ์๋ฏ์ด ContextWrapper๋ฅผ ์์ํ๋ ์ปดํฌ๋ํธ๋ Activity, Service, Application์ด๋ค.
BroadcastReceiver๋ ContentProvider๋ ContextWrapper๋ฅผ ์์ํ์ง ์๋๋ค.
์ฌ๊ธฐ์ Activity, Service, Application ์ปดํฌ๋ํธ๋ ๊ฐ๊ฐ ContextImpl์ ์์ฑํ๊ณ ContextWrapper์์ getBaseContext()์ getApplicationContext()๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ Context๋ฅผ ๋ฐํํ๋ค.
- Application Context
- Singleton ๊ฐ์ฒด๋ก ์ดํ๋ฆฌ์ผ์ด์
์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๋ฐ๋ฅธ๋ค. ์ฑ์ ์์๋ถํฐ ์ข
๋ฃ์๊น์ง ์ด์์๋ค.
- Activity Context
- Activity ์์ฒด๊ฐ Context๋ฅผ ์์ํ๊ณ ์๊ธฐ์ Activity ์ธ์คํด์ค ์์ฒด๊ฐ Context ์ญํ ์ ํ๋ค.
- ๊ทธ๋ ๊ธฐ์ Activity Context๋ ์กํฐ๋นํฐ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๋ฐ๋ฅธ๋ค.
Context Type
-
Application
: Singleton์ผ๋ก ์ดํ๋ฆฌ์ผ์ด์
๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ํจ๊ป Application Context๊ฐ ์์ฑ๋๊ฒ Application Context๋ ๋์ผํ ์ฑ ์์์ ํญ์ ๋์ผํ ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ค.
-
Activity / Service
: ์กํฐ๋นํฐ๋ ์๋น์ค๊ฐ ์์ฑ๋ ๋๋ง๋ค ๊ฐ๊ฐ์ Context Instance๊ฐ ์์ฑ๋๋ค.
-
BroadcastReceiver
: ์๊ธฐ ์์ ์ด Context๋ ์๋๋ค. ๋ฆฌ์๋ฒ๊ฐ ๋ธ๋ก๋์บ์คํธ ์ฒ๋ฆฌ๋ฅผ ํ ๋๋ง๋ค Context๋ฅผ onReceive()์ ์ธ์๋ก ์ ๋ฌ ๋ฐ์์ ์ฌ์ฉํ๋ค. ์ ๋ฌ ๋ฐ์ Context์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ ์กํฐ๋นํฐ ์ปจํ
์คํธ๋ก ๋ธ๋ก๋ ์บ์คํธ ์คํ ์ ์กํฐ๋นํฐ๊ฐ ์ข
๋ฃ๋๋ฉด ๋ธ๋ก๋ ์บ์คํธ๋ ํจ๊ป ์ข
๋ฃ๋๋ค.
-
ContentProvider
: ์๊ธฐ ์์ ์ด Context๋ ์๋๋ค. ๋์ผํ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ํด ํธ์ถ ์ ๋์ผํ Singleton Context ๊ฐ์ฒด๋ฅผ ๋ฐํํ๊ณ , ์๋ก ๋ค๋ฅธ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ํด ํธ์ถ ์ ๋ค๋ฅธ Context ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
Context ์ฐธ์กฐํ๋ ๋ฐฉ๋ฒ โ
-
ActivityName.this
- Activty Context๋ฅผ ๋ฐํ.
- Activity Scope์์์ ์ฌ์ฉํ ๋๋ this๋ง์ผ๋ก๋ ๊ฐ์ ธ์ฌ ์ ์๋ค.
- Activity์ inner class์ ๊ฐ์ด Activity Scope๋ฅผ ๋ฒ์ด๋ ๊ณณ์์ Activity Instance๋ฅผ ์ฐธ์กฐํ๊ณ ์ถ์ ๋ ActivityName.this๋ก ๊ฐ์ ธ์ฌ ์ ์๋ค.
-
getApplicationContext()
- Application Context๋ฅผ ๋ฐํํ๋ค.
-
getApplication()
- Application ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ค.
- Application๋ Context์ ์์ ํด๋์ค์์ผ๋ก Context์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค.
- ํ์ง๋ง, Application๊ณผ ApplicationContext๊ฐ ๋์ผํ ์ธ์คํด์ค๋ผ๋ ๋ณด์ฅ์ด ์๊ณ , Application์ Activity๋ Service๋ด๋ถ์์๋ง ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ๋ค๋ ์ฐจ์ด๋ ์๋ค.
-
getBaseContext()
- ContextWrapper์ Context ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ค.
- ๋ค๋ฅธ Context๋ฅผ ์ฐธ์กฐํด์ผ ํ๋ ๊ฒฝ์ฐ, ๊ทธ ContextWrapper ์์ ์๋ context๋ฅผ getBaseContext()๋ก ๊ฐ์ ธ์ ์ฌ์ฉํ๋ค.
- ์ด๋ Activity Context์ ์ผ์ข
์ด๋ค.
-
View์์ getContext()
- View์์๋ getContext()๋ฉ์๋๊ฐ ์์ด์ Context๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋๋ฐ, View๋ฅผ ์์ฑํ ๋ ์์ฑ์์ ์ธ์๋ก ๋ค์ด๊ฐ๋ Context๊ฐ getContext()์ ๊ฒฐ๊ณผ๋ก ๋ฐํ๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก View๊ฐ ์ํด์๋ Activity์ Context๊ฐ ํด๋น View์ Context๊ฐ ๋๋ค.
Context์ ์๋ช
์ฃผ๊ธฐ๊ฐ ๋ค๋ฅด๊ธฐ์ Activity์ ๋ถ๋ฆฌ๋ ์์
์ Activity Context๋ฅผ ์ฌ์ฉํ๋ฉด ์๊ธฐ์น ๋ชปํ ๋์์ด ๋ฐ์ํ ์ ์๋ค.
๋ฐ๋๋ก Activity์ ์ข
์๋ ์์
์ Application Context๋ฅผ ์ด์ฉํ๋ฉด Activity๊ฐ ์ข
๋ฃ๋์ด๋ Context๋ฅผ ์ด์ฉํ ์์
์ด ์ข
๋ฃ๋์ง ์์(๋ฉ๋ชจ๋ฆฌ ํด์ ๊ฐ ์ด๋ฃจ์ด์ง์ง ์์์) ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ์ ์๋ค.
โ ๏ธ ๊ทธ๋ ๊ธฐ์ Context์ ํน์ง๊ฐ ํ์ํ ์์
์ ํน์ฑ์ ๊ณ ๋ คํด ์๋ง๊ฒ ์จ์ผ ํ๋ค.