MVVM
패턴을 적용해보면서 Shared Preference
에 접근하는 부분은 Repository
로 만들어 Model
로 빼야하는 일이 생겼는데 이때 View Model
에서는 직접적으로 Context
를 사용할수 없었기에 View
에서 Context
를 전달받아 View Model
로 넘기는 요상한 상황이 발생했다.
아무리 생각해봐도 이런식으로 View
와 Model
이 얽히는건 이상하다고 생각했기에 방법을 알아보던중 Enum class
와 Adapter
사용시에 Context
문제가 있을 때마다 같은 조원분이 말씀해주셨던 전역으로 application Context
를 사용하는 방법이 생각나 적용해보았다.
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를 초기화 해줘야 함
}
}
Application
클래스를 상속받게되면 Manifest
파일에서 해당 클래스를 지정해야 사용이 가능하다.
기본적으로 Application
클래스는 앱의 모든 라이프사이클과 상태를 관리하기때문에 앱에는 1개만 존재해야하기 때문이다.
<application
...
android:name=".MyApp">
<!-- 어플리케이션 수준에서 선언해준다. -->
<activity>
...
</activity>
</application>
원하는 곳(Adapter
내부, Enum class
, Repository
등)에서 클래스이름
. 컨텍스트 변수 이름
으로 어플리케이션 컨텍스트를 호출해 사용이 가능하다.
진짜 이러다 죽겠다...
재미있어 죽겠어서 하다보니 죽겠다...
살자..