[TIL] 전역 Context 사용

박봉팔·2024년 1월 30일
0

context...context...context!!!

MVVM패턴을 적용해보면서 Shared Preference에 접근하는 부분은 Repository로 만들어 Model로 빼야하는 일이 생겼는데 이때 View Model에서는 직접적으로 Context를 사용할수 없었기에 View에서 Context를 전달받아 View Model로 넘기는 요상한 상황이 발생했다.

아무리 생각해봐도 이런식으로 ViewModel이 얽히는건 이상하다고 생각했기에 방법을 알아보던중 Enum classAdapter사용시에 Context문제가 있을 때마다 같은 조원분이 말씀해주셨던 전역으로 application Context를 사용하는 방법이 생각나 적용해보았다.


Application Class

Application 클래스를 상속받아 MyApp 클래스를 만들어준 뒤 companion object를 사용해 application context를 만들어주면 MyApp.appContext와 같이 전역적으로 어플리케이션 컨텍스트를 사용할 수 있다.

class MyApp : Application() {
    companion object {
        lateinit var appContext: Context
    }

    override fun onCreate() {
        super.onCreate()
        appContext = applicationContext // onCreate에서 context를 초기화 해줘야 함
    }
}

Manifest

Application클래스를 상속받게되면 Manifest파일에서 해당 클래스를 지정해야 사용이 가능하다.

기본적으로 Application클래스는 앱의 모든 라이프사이클과 상태를 관리하기때문에 앱에는 1개만 존재해야하기 때문이다.

<application
        ...
        android:name=".MyApp">
        <!-- 어플리케이션 수준에서 선언해준다. -->
        
        <activity>
            ...
        </activity>
        
    </application>

사용

원하는 곳(Adapter내부, Enum class, Repository 등)에서 클래스이름 . 컨텍스트 변수 이름으로 어플리케이션 컨텍스트를 호출해 사용이 가능하다.


오늘은 어땠나요?

진짜 이러다 죽겠다...

재미있어 죽겠어서 하다보니 죽겠다...

살자..

profile
개발 첫걸음! 가보자구!

0개의 댓글