#8 MutableLiveData 정~말 쉬운 예제
앱을 제작하다 보면 ...
변수 값의 변경을 탐지하면 편할 때가 무조건 있다.
옵저버 패턴을 사용하면 되겠지만, 구현 자체가 복잡하기도 하고... 사용 빈도가 낮은 부분에 클래스를 두 개씩 붙여가면서 구현하기는 뭔가 지저분하기도 하고...
그러다 만나는게 MutableLiveData 이긴 한데 ...
공식 문서를 살펴보아도 이해가 잘 가지 않게 써놓았기도 했고, 각종 블로그를 돌아다녀보아도 그 예제가 조금은 난해하고 복잡한 것이 필자의 생각이다.
사실 나는 앱 개발을 처음 공부할 때부터 길이가 긴 예제를 보면 생각이 많아졌다.
'왜 이렇게 길고 복잡하게 쓰지?'
'라이브러리를 썼는데 왜 이렇게 코드가 길지?'
'아무리 생각해봐도 별 거 아닌 기능인 것 같은데 왜 이렇게 구현을 거창하게 하는 거지?'
나한텐 옵저버 패턴이 딱 그랬다.
그래서 처음에는
옵저버 패턴이 굉장히 난해하고 지저분해서 패스. MutableLiveData 는 구현이 복잡하다고 생각해서 패스.
그래서 도달한 결론이 Thread 였다. Thread 에 sleep 을 500~1000ms 로 걸어두고 while(true) 해버리는 것이었다. 굉장히 무식하고 성능이 떨어지는 방법이었지만, 달리 방법이 없었다는 핑계를 대고싶다.
각 잡고 MutableLiveData 를 뜯어보았는데
웬 걸? 너무너무너무 간단했다.
public class MainActivity extends AppCompatActivity {
private MutableLiveData<String> m_data = new MutableLiveData<>();
// 그냥 이렇게 선언, 초기화 해주고!
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (!m_data.isEmpty()) { // Null Check 딱 해주고!
Log.d("LOG", m_data.getValue()); // 로그 찍어주고!
}
m_data.observe(MainActivity.this, new Observer<String>() {
@Override
public void onChanged(String string) {
Log.d("LOG", m_data.getValue()); // 결과 확인을 위해 로그를 찍어주고!
}
});
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
m_data.setValue("Change"); // setValue() 해주면!
}
});
정말 너무 쉽다!
과정은 이러하다.
- MutableLiveData 를 선언 및 초기화
- observe 메소드를 통해 onChanged 콜백 메소드에 todo (developer) 정의.
- Action (해당 예제에서는 button 의 onClick()) 에 MutableLiveData 의 setValue 메소드 구현.
이게 끝이다. setValue 메소드를 통해 MutableLiveData 의 값이 변경되면 onChanged 메소드가 콜백으로 호출되는 형태이다.
주의사항
단, setValue() 는 main Thread 에서 호출하여야 한다. 다른 Thread 에서 MutableLiveData 의 값을 변경하고자 하는 경우에는 postValue() 를 사용하면 된다.
Author And Source
이 문제에 관하여(#8 MutableLiveData 정~말 쉬운 예제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gn000123/8-MutableLiveData-정말-쉬운-예제저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)