Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
Tags
- activity
- Android
- EditText Button
- 컴포즈
- Glide
- recyclerview
- 안드로이드
- layoutinflater
- 우아한테크코스
- android studio
- 로또 미션
- compose
- 프리코스
- 이미지 로딩
- constraint
- 우테코 6기
- 안드로이드 스튜디오
- broadcast reciver
- moshi
- 안드로이드 키보드
- onscrollstatechanged
- buildSrc
- 멀티모듈
- 최상단
- 4대 컴포넌트
- 코틀린
- 우테코
- coil
- serialization
- GSON
Archives
- Today
- Total
정답보다 해답을
[Android] Context, 알고 쓰자 본문
안드로이드 개발에서 Context는 앱의 현재 상태와 전반적인 환경 정보를 담고 있는 중요한 역할을 합니다. 이번 포스팅에서는 Context의 종류와 사용법을 정리해 보겠습니다. 이를 통해 올바른 Context 사용을 통해 메모리 누수를 방지하고 앱의 안정성을 높일 수 있습니다.
1. Context란? 🤔
Context는 안드로이드 애플리케이션의 현재 상태와 전반적인 환경 정보를 담고 있는 추상 클래스입니다. Context는 앱에서 리소스, 데이터베이스, 시스템 서비스 등에 접근할 수 있도록 "맥락"을 제공합니다.
2. Context의 종류 📑
안드로이드에서 Context는 여러 유형으로 나뉩니다. 각 유형은 사용 목적에 따라 적합한 작업이 다르므로 상황에 맞는 Context를 사용해야 합니다.
2.1 Application Context
- 사용법:
val appContext = getApplicationContext() // 또는 val appContext = applicationContext- 특징
- 애플리케이션의 수명 주기와 연결되어 있고, 싱글톤 인스턴스로 제공됩니다.
- 메모리 누수의 위험이 적어 장기적인 리소스 접근에 적합합니다.
- 다만 UI 관련 작업에는 적합하지 않습니다.
2.2 Activity Context
class MainActivity : AppCompatActivity() {
fun showDialog() {
AlertDialog.Builder(this) // Activity Context 사용
.setMessage("메시지")
.show()
}
}
- 특징
Activity수명주기와 연결되어 있습니다.- UI 작업에 적합하여 View 생성이나 Dialog 표시 등에 주로 사용됩니다.
2.3 Fragment Context
Fragment는 자체 Context를 가지지 않으며, 항상 부모 Activity의 Context를 참조합니다.
- 특징
Activity의 생명주기에 종속되어 부모의 Context를 사용하는 방식입니다.
2.4 Fragment Context 사용 방법
getContext()
class MyFragment : Fragment() {
fun showToast() {
context?.let { ctx ->
Toast.makeText(ctx, "메시지", Toast.LENGTH_SHORT).show()
}
}
}
requireContext()
class MyFragment : Fragment() {
fun showDialog() {
AlertDialog.Builder(requireContext())
.setMessage("메시지")
.show()
}
}
- Fragment Context 활용 가이드 💡
- UI 작업에는
requireContext()사용 - Nullable 상황에서는
getContext()와 null 체크를 함께 사용 - 장기적인 리소스 참조가 필요하다면
Activity의applicationContext를 사용하는 것이 좋습니다. onAttach()및onDetach()에서 생명 주기를 고려하여 사용합니다.
- UI 작업에는
3. 올바른 Context 사용법 ✅
3.1 Application Context 사용 시점
- 싱글톤 객체 생성
- 앱 전역 라이브러리 초기화
Activity범위를 넘어서는 장기 작업
3.2 Activity Context 사용 시점
- UI 관련 작업 (Dialog, Toast 등)
View생성 및 조작LayoutInflater사용 등 UI가 연관된 작업에 적합
3.3 주의사항 ⚠️
잘못된 Context 사용은 메모리 누수를 초래할 수 있으므로, 상황에 맞는 Context를 사용하는 것이 중요합니다.
- 잘못된 사용 예시
class MySingleton { private lateinit var context: Context // Activity Context 참조 }- 올바른 사용 예시
class MySingleton { private lateinit var context: Context fun init(context: Context) { this.context = context.applicationContext // Application Context 사용 } }
4. Context 사용 규칙 📋
- GUI 작업은 반드시
Activity Context를 사용 - 수명주기가 긴 객체는
Application Context를 사용 - Static 변수 또는 메서드에서는
Application Context만 사용 - 항상 가장 가까운 범위의 Context를 사용 (예:
Activity내부에서는Activity Context)
'Android' 카테고리의 다른 글
| [Android] LayoutInflater, 알고 쓰자 - 생명주기와 View 생성 관리 (7) | 2024.11.13 |
|---|---|
| [Android] Google Play Console 한국어 설정 (2) | 2024.11.02 |
| [Android] 리사이클러뷰에서 상단으로 스크롤하는 버튼 구현 - onScrollStateChanged (3) | 2024.10.30 |
| [Android] 안드로이드 키보드 제어하기 (3) | 2024.10.28 |
| [Android] ConstraintLayout 알고 쓰자. (2) | 2024.10.28 |