PatternTest_hilt.zip
0.11MB

 

이전에 aac_mvvm 패턴 프로젝트에서 

메인화면에서 Retrofit 객체를 만들어서 ViewModel의 생성자로 넘겨주는 식으로 구현했는데

뭔가 찜찜했다.

 

뷰에서는 비즈니스 로직을 알 수 없게 구현해야하는 거 아닌가? 싶어서...

 

그래서 해바라기 예제 소스랑 비교해보니

해바라기 예제 소스는 Hilt가 적용되어있는 것을 알게 되었다.

 

그래서 나도 Hilt를 적용해보았다!

 

java랑 코틀린이랑 달라서 ViewModel 생성 시에는 어떻게 해야할 지 몰라서 기존과 똑같이 해 줬음..

방법이 있다면 알려주세용~

 

https://velog.io/@haanbink/Android-Hilt-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

EditText에 텍스트 입력 후 버튼 눌러서 리스트에 추가

리스트 항목을 롱클릭해서 리스트에서 제외

하는 예제이다.

AACMVVMTest.zip
0.11MB

 

RecyclerView에

AAC ViewModel + LiveData + ListAdapter를 곁들인..

 

나의 작고 소듕한 예제..

 


데이터 바인딩도 추가했다.

 

AACMVVMTest_databinding.zip
0.11MB

 

참고 링크 : 

https://velog.io/@hygge/Android-RecyclerView%EC%97%90-DataBinding-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0

 

[Android] RecyclerView에 DataBinding 적용하기

태그들을 RecyclerView로 만들고 DataBinding을 곁들여서 Drawable 이미지와 텍스트를 변경해줄 것이다. 파일 구조는 위와 같다.RecyclerView에 들어가는 정보인 이미지와 텍스트를 클래스로 정의해준다. 이

velog.io

https://improve777.medium.com/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B0%94%EC%9D%B8%EB%94%A9-two-way-binding-%EC%9B%90%EB%A6%AC-4317396728ff

 

데이터바인딩 two-way binding 원리

EditText 로 알아보는 BindingAdapter

improve777.medium.com

https://jwsoft91.tistory.com/67?category=815797 

 

[Java]  DataBinding  +  LiveData  +  BindingAdapter

DataBinding + LiveData + BindingAdapter build.gradle (Module: app) android { dataBinding { enabled = true } } BindingAdapters.java package com.jwsoft.javaproject; import android.view.View; import androidx.annotation.ColorInt; import androidx.databinding.Bi

jwsoft91.tistory.com

 

예를 들어서 '서버에서 랜덤한 텍스트를 받아와서 화면에 뿌려주는' 프로그램을 짠다고 했을 때 

관심사 = 서버에서 랜덤한 텍스트를 받아온다, 화면에 텍스트를 표시한다
관심사의 분리 = 위에 적은 관심사대로 함수 또는 클래스를 분리하는 것 (알 필요가 없는 정보를 분리/제거)

관심사를 왜 분리하는지?
=> 알아보기 쉬움 = 수정하기 쉬움 = 유지보수 용이성
=> 의존성 분리 측면에서 필요
  [의존성이란?] 파라미터나 리턴값 또는 지역변수 등으로 다른 객체를 참조하는 것, 하나의 변경사항이 다른 하나에 영향을 끼치면 의존성이 있다고 함.
  ※ 왜 의존성을 분리해야하는지?
    = 유지보수할 때 영향 범주를 제한하기 위해
    = 서로의 변화에 영향을 받지 않기 위해 (의존성 전이가 발생되지 않게 하기 위해)


https://velog.io/@eddy_song/separation-of-concerns
https://leffept.tistory.com/401 (관심사 분리 예시)
https://willseungh0.tistory.com/61 (횡단 관심사 예시)

그 외 안드로이드 개발/정보 공유 카카오톡 단체 채팅방에서 도움을 받음 

 

아키텍처
MVP https://relz.tistory.com/95
MVVM https://relz.tistory.com/96
(단, 예제는 AAC를 이용하여 MVVM 구현하였음)
관심사 분리 O
레이어 아키텍처  
안드로이드 권장 아키텍처 O
클린아키텍처 책 읽기  
클린 코드 책 읽기  
AAC (Android Architecture Components)
DataBinding O
LifeCycle  
Navigation  
Room O
Paging O
WorkManager  
LiveData O
ViewModel O
비동기 제어
코루틴  
플로우  
기타
컴포즈  
RxJAVA  
DI (hilt) 기본만 해 보았음. scope에 대한 추가 공부 필요
ListAdapter O

 

'버튼을 누르면 서버에서 랜덤 텍스트를 받아와서 화면에 뿌리는' 앱이다.

구글에서 적극적으로 권장하는 AAC를 이용한 MVVM 패턴을 구현하였다.

 

AAC는 뭐고 MVVM은 무엇인가!

....는 다른 블로그에서 열심히 설명해주니 그림 한 장으로 땡치겠다.

 

▼AAC를 이용한 아키텍처 도식화

 

아.. 위의 그림에는 Observer를 통해 LiveData를 관찰(구독)하라고 되어있는데

나는 하는 김에 DataBinding으로 대체하였다.

 

위의 방식까지만 하고 싶으면 DataBinding은 하지 말고 액티비티에 아래처럼 해 주면 된다.

viewModel.fact.observe(new Observer<String>() {
    void onChange(String s) {
       //갱신 시 할 작업
    }
}

findViewById(R.id.button).setOnClickListener(new OnClickListener() {
    void onClick(View v) {
        viewModel.getData();
    }
}

 

작동 방식은 사실 MVP랑 뭐가 다른지.. 잘 모르겠다 ㅜ.ㅜ

MVP는 '야 해줘 => 야 해줘 => 했어 => 했어 => ㅇㅋ'였고

MVVM은 '야 해줘 => 야 해줘 => (다했다) => ㅇㅇ봤음 => ㅇㅇ봤음' 인 것 같기도..?

 

 


 

 

전체 소스는 아래 참고

https://github.com/YelanJeon/PatternTest/tree/aac_mvvm

 

GitHub - YelanJeon/PatternTest: 디자인 패턴 공부

디자인 패턴 공부. Contribute to YelanJeon/PatternTest development by creating an account on GitHub.

github.com

 

사실 이게 MVVM 패턴에 맞게 개발한건지 모르겠다.

MVVM 패턴의 ViewModel과 AAC의 ViewModel은 다른 거라고 들었기 때문이다.

음 좀 더 공부해서 pure MVVM을 구현하도록 해야겠다 ㅜㅜ

'개발 > 컴퓨터과학' 카테고리의 다른 글

관심사, 관심사 분리, 의존성  (0) 2022.12.06
디자인 패턴 공부 예제 -1 :: MVP  (2) 2022.12.05

+ Recent posts