Context๋ ์ ํ๋ฆฌ์ผ์ด์ ํ๊ฒฝ์ ๋ํด ์ ์ญ์ ์ธ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ ์ถ์ ํด๋์ค์ด๋ค. context๋ฅผ ์ฌ์ฉํ๋ฉด ํน์ ์ ํ๋ฆฌ์ผ์ด์ ์์๊ณผ ํด๋์ค์ ์ ๊ทผํ ์ ์๊ณ , ์กํฐ๋นํฐ๋ฅผ ์คํํ๊ฑฐ๋ ์ธํ ํธ๋ฅผ ์์ ํ๋ ๋ฑ ๋ค๋ฅธ ์๋๋ก์ด๋ ์ปดํฌ๋ํธ๋ค๊ณผ ์ํธ์์ฉํ ์ ์๋ค. ์ฃผ์ ๋ฆฌ์ฃผ์ ๋ฆฌ ์ค๋ช ํ์ง๋ง context๊ฐ ๊ฐ๋ 4๊ฐ์ง์ ํน์ง์ ๊ตฌ์ฒด์ ์ผ๋ก ์ค๋ช ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
1. ์ ํ๋ฆฌ์ผ์ด์
์ ํ์ฌ ์ํ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์๋๋ก์ด๋ ์ฑ์ ์ฌ๋ฌ๊ฐ์ ํ๋ฉด์ผ๋ก ๊ตฌ์ฑ๋์ด ์๊ณ , ๊ฐ ํ๋ฉด์ ํด๋น ํ๋ฉด์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ context๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
2. ์กํฐ๋นํฐ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ญ์ ๋ํ ์ ๋ณด๋ฅผ ์ป์ ๋ ์ฌ์ฉํ๋ค.
ํน์ ํ๋ฉด์ context๋ ์ฌ์ฉ์๊ฐ ํน์ ์กํฐ๋นํฐ ๋๋ ํ๋๊ทธ๋จผํธ์ ์์์ ๊ฐ์ฃผํ๊ณ , context๋ฅผ ์ฌ์ฉํด ํ๋ฉด๊ณผ ๊ด๋ จ๋ ์์
์ ํ ์ ์๋ค.
3. ์ ํ๋ฆฌ์ผ์ด์
๋ฆฌ์์ค, Local Database ๋๋ DataStore์ ๊ฐ์ ๋ก์ปฌ ์ ์ฅ์์ ์ ๊ทผํ ๋ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
๊ฐ ํ๋ฉด์ ๋ํ context๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ํ์ํ ์ ์๋ค.
4. ์กํฐ๋นํฐ์ ์ ํ๋ฆฌ์ผ์ด์
ํด๋์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก context๋ฅผ ์์ํ๋ค.
context๋ ์๋ชป ์ฌ์ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ์ ์๋ค. ์กํฐ๋นํฐ๋ ๊ฐ๊ฐ์ ํ๋ฉด์, ์ ํ๋ฆฌ์ผ์ด์
์ ์ฑ ์ ์ฒด๋ฅผ ์ฐธ์กฐํ๋ฉฐ ๋ ๋ค context๋ฅผ ์์ํ๋ค.
GeeksForGeeks์์ context์ ๋ํด ์ค๋ช ํ๋ ์ข์ ์๋ฅผ ๋ฐ๊ฒฌํ๋ค.
ํ ์ฌ๋์ด ํธํ ์ ๋ฉฐ์น ๋ฌต๊ฒ ๋์๋ค. ๊ทธ๋ ์์นจ, ์ ์ฌ, ์ ๋ ์ ๋์ ๋ง์ถฐ ๋จน์ด์ผ ํ๋ค. ๊ทธ๊ฐ ๋ผ๋๋ฅผ ์ ๋ ์ฑ๊ฒจ ๋จน์ผ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ๋๊ฐ? ๋น์ฐํ ํ๋ก ํธ ์ง์์๊ฒ ๊ฐ์ ์์ฌ๋ฅผ ๊ฐ๋ค๋ฌ๋ผ๊ณ ์์ฒญํด์ผ ํ๋ค. ์ด๋ฅผ ์๋๋ก์ด๋ ํ๊ฒฝ์ ๋น์ ํ๋ค๋ฉด ์์ฌ๋ฅผ ์์ฒญํ๋ ์ฌ๋์ ๋จ์ผ Activity, ํ๋ก ํธ ์ง์์ context, ํธํ ์ App์ด ๋๊ณ , ์์ฌ๋ Resources๊ฐ ๋๋ค.
์ ์์ ๋ฅผ ํ ๋๋ก, context๋ ์กํฐ๋นํฐ๋ ํ๋๊ทธ๋จผํธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ณด(์์)๋ฅผ ์ ๊ณตํ๋ ์ญํ ์ ํ๋ค๊ณ ์ ์ถํด ๋ณผ ์ ์๋ค.
context๋ ํฌ๊ฒ Application Context, Activity Context 2๊ฐ์ง ํ์
์ด ์๋ค.
Application Context
์ ํ๋ฆฌ์ผ์ด์
์ ์ญ์์ ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค. ์ฑ๊ธํค ์ธ์คํด์ค๋ก ํ๋ก์ธ์ค์์ 1๊ฐ๋ง ์กด์ฌํ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์
์ ์ญ์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ฑ๋๊ณ ์ข
๋ฃ๋ ๋๊น์ง ์กด์ฌํ๋ค. Application Context๋ getApplicationContext() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ป์ ์ ์๋ค. ํ์ฌ ์ปจํ
์คํธ๊ฐ ์ข
๋ฃ๋ ์ดํ์๋ ์ปจํ
์คํธ๊ฐ ํ์ํ ์์
์ด๋ ์กํฐ๋นํฐ ์ค์ฝํ๋ฅผ ๋ฒ์ด๋ ์ปจํ
์คํธ๊ฐ ํ์ํ ์์
์ ์ ํฉํ๋ค.
Activity Context
์กํฐ๋นํฐ ๋ด์์ ์ ํจํ Context์ด๊ธฐ ๋๋ฌธ์ ์กํฐ๋นํฐ์ ๋์ผํ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๊ฐ๊ณ ์๋ค. Toast๋ Dialog ๊ฐ์ UI ๊ด๋ จ ์์
์ ์ํด ์ฃผ๋ก ์ฌ์ฉํ๋ค. Activity Context๋ this ๋๋ getBaseContext(), getContext()๋ก ์ป์ ์ ์๋ค.
โ ํ์ํ Context๋ฅผ ์ป์ ์ ์๋ methods
getApplicationContext()
Application Context๋ฅผ ๋ฐํํ๋ค.
getContext()
ํ์ฌ ์คํ๋๊ณ ์๋ ๋ทฐ์ Context๋ฅผ ๋ฐํํ๋ค.
getBaseContext()
์์ ์ Context๊ฐ ์๋ ๋ค๋ฅธ Context์ ์ ๊ทผํ ๋ ์ฌ์ฉํ๋ค.
Activity๋ Context๋ฅผ ์์ํ๊ณ ์๊ธฐ ๋๋ฌธ์ this๋ก ๋๊ธฐ๋๊ฒ์ด ๊ฐ๋ฅํ์ง๋ง, Fragment๋ Context๋ฅผ ์์ํ์ง ์๊ธฐ ๋๋ฌธ์ this๋ก ๋๊ธฐ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์ Fragment์ context๋ฅผ ์ป๊ณ ์ถ๋ค๋ฉด getContext()๋ฅผ ์ฌ์ฉํด์ผํ๋ค.
@NonNull
public final Context requireContext() {
Context context = getContext();
if (context == null) {
throw new IllegalStateException("Fragment " + this + " not attached to a context.");
}
return context;
}
@Nullable
public Context getContext() {
return mHost == null ? null : mHost.getContext();
}
getContext()์ ๋ํด ๊ฒ์ํด๋ณด๋์ค, requireContext()๋ก๋ context๋ฅผ ์ป์ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค. ๋ค๋ง ์ด ๋๊ฐ์ง์ ๋ฉ์๋๋ ๊ฐ๊ฐ ์ฐจ์ด๊ฐ ์๋๋ฐ, getContext()์ ๊ฒฝ์ฐ context()๊ฐ ํธ์คํธ์ ๋ถ์ด์์ง ์์ ๋ null์ ๋ฐํํ์ง๋ง, requireContext()์ ๊ฒฝ์ฐ getContext()์์ ๋ฐํ๋ context๊ฐ null์ผ ๊ฒฝ์ฐ illegalStateException์ throwํ๋ค. ์๋ฅผ ๋ค์ด Fragment์์ context์ ์ ๊ทผํ๋ฉด null์ด ์๋ ๊ฐ์ ๋ฐํํ์ง๋ง, fragment๊ฐ activity์ attach ๋์ด์์ง ์์ผ๋ฉด ์์ธ๊ฐ ๋ฐ์ํ ์ ์๋ค๊ณ ํ๋ค. ๊ทธ๋ฌ๋๊น ๋๋๋ก์ด๋ฉด requireContext()๋ฅผ ํตํด context๊ฐ null์ด ์๋์ ๋ณด์ฅํ๋ ๊ฒ์ด ์ข๋ค.
์์ฃผ ์ฌ์ฉํ๋ ํ ์คํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์๋ก ๋ค์ด๋ณด๋ฉด,
public static StyleableToast makeTextโ(@NonNull
Context context,
String text,
@StyleRes
int style)
makeText()์ context ํ๋ผ๋ฏธํฐ๋ Null ๊ฐ์ ํ์ฉํ์ง ์๋๋ค. ๋ฐ๋ผ์ getContext()๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ?.let ํค์๋๋ฅผ ์ฌ์ฉํด context๊ฐ null์ด ์๋ ๋๋ง makeText()๋ฅผ ์คํํ๋ผ๊ณ ๊ฒฝ๊ณ ๋ฅผ ๋์ด๋ค.
ํ์ง๋ง ์๋์ ๊ฐ์ด requireContext()๋ฅผ ์ฌ์ฉํ๋ฉด context๊ฐ null์ด ์๋์ ๋ณด์ฅํ๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
https://developer.android.com/reference/android/content/Context
https://www.geeksforgeeks.org/what-is-context-in-android/
https://stackoverflow.com/questions/24941572/difference-in-context-for-activity-and-fragment
https://minchanyoun.tistory.com/58