티스토리 뷰
컨텍스트에 대해 이해하는 시간을 가져봅니다.
컨텍스트는 ActivityManagerService에 접근하는 역할을 합니다. 안드로이드 스튜디오를 설치하면, 이미 많은 함수들이 자동으로 구현됩니다. 이렇게 자동으로 구현되어 개발자가 쉽게 사용할 수 있도록 돕는 서비스가 ActivityManagerService라고 이해하시면 쉽습니다. 이러한 서비스에 접근하는 역할이 컨텍스트입니다.
예를 들어 아래의 코드를 살펴봅니다.
class Resource : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity)
이하생략
}
}
리소스 클래스가 AppCompatActivity()를 상속받고 있는데, AppCompatActivity()는 컨텍스트가 ActivityManagerService에 접근할 수 있기 때문에 이용 가능한 것입니다.
AppCompatActivity()의 가장 상위 상속자를 추적하기 위해 Ctrl 키를 눌러서 확인해보면, AppCompatActivity - FragmentActivity - ComponentActivity - Activity - ContextThemeWrapper - ContextWrapper - Context 이렇게 Context클래스가 최상위로 되어 있음을 알 수 있습니다.
이렇게 수많은 클래스가 이미 자동으로 구현되어 있으며, 컨텍스트를 통해서 필요한 메소드를 사용할 수 있었던 것입니다.
컨텍스트는 두 종류가 있습니다.
1. Activity Context
2. Application Context
먼저 아래의 코드를 살펴봅니다.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MyApplication">
<activity android:name=".sample3">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".sample"></activity>
<activity android:name=".sample2"></activity>
</application>
</manifest>
위의 AndroidManifest.xml 파일을 보면, application 태그 안에 activity 태그가 포함된 것을 볼 수 있습니다.
어플리케이션은 sample1~3의 액티비티를 담고 있습니다.
sample3 액티비티는 intent-filter 태그를 지니고 있어서 시작하는 액티비티를 나타냅니다.
여기서 유추할 수 있는 부분은, 어플리케이션은 앱 전체에 대한 주변 정보를 의미하고, 액티비티는 sample3와 같이, 해당 액티비티에 대한 주변 정보를 의미합니다.
따라서, 액티비티 컨텍스트는 어떤 특정 액티비티에서 컨텍스트를 통해 ActivityManagerService를 이용하는 것이며, 어플리케이션 컨텍스트는 앱 전체에서 컨텍스트를 통해 필요한 ActivityManagerService를 이용하는 것입니다.
컨텍스트를 실제로 불러오는 방법은 아래와 같습니다.
class Resource : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity)
//액티비티 컨텍스트
val context: Context = this
//어플리케이션 컨텍스트
val applicationContext = getApplicationContext()
}
}
액티비티 컨텍스트는 위의 예시처럼, AppCompatActivity()를 상속 받기 때문에 부모 타입인 Context를 타입으로 받으며, this 지시어를 통해서 불러오게 됩니다. 상속 부분에서 생성자를 만들 때, this를 사용한 것과 같은 개념입니다.
어플리케이션 컨텍스트는 getApplicationContext() 메소드를 사용해 불러오게 됩니다.
그럼 컨텍스트에 대한 설명은 여기서 마치도록 하겠습니다.
'Android App Coding' 카테고리의 다른 글
라이브러리 사용하기 Library (0) | 2021.07.09 |
---|---|
스레드 Thread (0) | 2021.07.09 |
리소스 값 Resource Values (0) | 2021.07.09 |
액티비티 <-> 프래그먼트 데이터 전달하기 (0) | 2021.07.08 |
프래그먼트 매니저와 트랜잭션 FragmentManager/Transaction (0) | 2021.07.08 |
- Total
- Today
- Yesterday
- lazy init
- 탭레이아웃
- Bmi Calculator
- RecyclerView
- 자바스크립트 배열
- ToDo List 앱 만들기
- bmi 계산기 만들기
- 메소드 오버라이딩
- 리사이클러뷰
- 대한민국 미제사건
- android adapter
- 2019년 사건사고
- 인텐트
- addView
- 애드뷰
- findViewById
- 안드로이드 어댑터
- 안드로이드 프로젝트
- 안드로이드 앱 만들기
- 상대적 레이아웃
- 미제사건
- 안드로이드 스튜디오 에러
- 2007년 사건사고
- view binding
- 2021년 사건사고
- 리스트뷰
- 뷰 바인딩
- 선형 레이아웃
- notifyDataSetChanged
- tabLayout
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |