안드로이드로 개발할때 다른 클래스 데이터를 어떤식으로 접근하시나요?
안드로이드로 개발하다보면 다른 클래스의 값을 참조하거나 변경 할때가 많은데요
특히 리사이클러뷰 같은거 쓰면 더더욱 그런거 같은데요
MainActivity가 있고 A,B라는 클래스(액티비티)가 있을때 A,B에서 MainActivity클래스의 데이터를 변경해야 될때
어떤식으로 하나요?
처음에는 리스너도 등록해서 써보고 변수가 몇개 안되면 A,B클래스(액티비티) 만들때 변경(참조)할 변수를 넘겨 주기도 해봤는데요 변수가 많아지니 전부다 넘겨주기도 힘드네요
그래서 요즘은 그냥 static 으로 선언해버리는데
이게 양날의 검같아서 어떻게 해야 될지 너무 고민됩니다
Activity간의 데이터 전달은 무조건 Intent 내의 Bundle형태로 전달을 하고, Activity를 실행해서 데이터를 가져와야 할 때는 startActivityForResult의 형태로 전달하는 편입니다.
값의 변경이 많고 여러 액티비티에서 사용해야 할 경우에는 싱글턴 클래스를 만들어 따로 관리를 하기도 하구요, 그 값이 어플이 종료되어도 동일한 값을 계속 들고 있어야 할 경우에는 SharedPreference를 사용합니다.
최근에 LiveData라는 개념도 생겨서 그 방식을 사용하셔도 되구요.
안드로이드에서 액티비티간의 데이터 전달은 intent로 하는 것이 정석입니다.
변수를 static으로 선언해서 다른 액티비티에서 접근하는 것이 개발상 가능은 하지만, 커플링이 생기기 때문에 좋은 구현이라고 볼수는 없을거같습니다.
A 액티비티에서 사용자의 액션으로 인해, B, C 액티비티의 뷰 내 데이터가 변경되어야 하는 경우에 구현을 깔끔하게하는 방법은 RxJava를 이용하면 좋습니다. (RxJava의 eventbus 구현을 참고해보세요)
그리고 여러 액티비티에서 같은 데이터를 참조하는 경우에는, 하나의 액티비티에 속하는 데이터로는 부적합해보입니다. 싱글톤 객체 내에서 데이터를 관리하거나 SharedPreference 혹은 DB에 저장해야하는 데이터는 아닌지 생각해보면 좋을거 같습니다.