ViewModel의 필요성 안드로이드에서 Activity와 fragment - UI 컨트롤러의 목적 기본적으로 UI 데이터를 표시하거나, 사용자 작업에 반응하거나, 권한 요청과 같은 운영체제 커뮤니케이션을 처리하는 것이다. 이러한 UI 컨트롤러에 데이터 관련 책임을 요구하면 클래스가 팽창되어 다른 클래스로 작업이 위임되지 않고, 단일 클래스가 혼자서 앱의 작업을 모두 처리하려고 할 수 있다. 이렇게 되면 테스트가 훨씬 더 어려워진다. -> 앱의 데이터 또는 데이터에 관한 모든 의사 결정 로직은 UI 컨트롤러 클래스에 포함해서는 안된다. 데이터에 관한 의사 결정 로직을 ViewModel에 추가해야 한다. ViewModel 클래스는 lifecycle을 고려하여 UI 관련 데이터를 저장하고 관리하도록 설계되었..
RecyclerView 여러가지 항목을 나열하는 목록 화면을 만들 때 사용한다. + 리스트뷰는 androidx 라이브러리에서 리사이클러 뷰를 제공하기 시작하면서부터 잘 사용되지 않는다. RecyclerView의 구성요소 ViewHolder: 항목에 필요한 뷰 객체를 가진다. 필수 Adapter: 항목을 구성한다. 필수 LayoutManager: 항목을 배치한다. 필수 ItemDecoration: 항목을 꾸민다. 뷰 홀더는 각 항목을 구성하는 뷰 객체를 가지며 어댑터는 뷰 홀더에 있는 뷰 객체에 적절한 데이터를 대입해 항목을 완성한다. 레이아웃 매니저는 어댑터가 만든 항목들을 어떻게 배치할지 결정하여 리사이클러 뷰에 출력한다. RecyclerView 사용 1. 리사이클러 뷰 선언 그래들 파일의 depend..
뷰 바인딩을 사용하는 이유 코드에서 XML에 입력한 객체를 사용하기 위해 findViewById() 함수를 이용하는 것은 꽤 귀찮은 방법이다. 이 경우 다음과 같이 id 값으로 뷰 객체를 획득하는데 val textView1: textView = findViewById(R.id.text1) 한 화면을 구성하는 데만도 많은 뷰가 필요하고, 뷰는 대부분 코드에서 이용하므로 -> 코드에서 뷰 객체를 선언하고 모두 findViewById() 함수로 하나하나 가져와야 하므로 번거롭다는 단점이 있다. 개발자들이 조금 더 쉽게 레이아웃 XML 파일에 등록된 뷰 객체를 쉽게 사용하기 위해 뷰 바인딩을 이용하게 되었다. 뷰 바인딩(View Binding)이란? 뷰 바인딩은 레이아웃 XML 파일에 선언한 뷰 객체를 코드에서..
루틴의 종류 우선 루틴의 종류에 대해 살펴보면 메인루틴, 서브루틴, 코루틴이 있다. 메인루틴: main 함수에 의해서 수행되는 프로그램의 흐름 서브루틴: main 함수 안에서 실행되는 개별함수들에 의해서 수행되는 흐름 즉 함수는 루틴의 한 종류이다! -> 보통 루틴은 일직선적인 흐름을 가지고 있다. 코루틴 특징은 일직선적인 흐름을 중간에 suspend해서 지연을 시켰다가 resume을 통해 다시 재시작하는 것이 가능하다는 점이다. 코루틴을 사용하면 이미 실행이 되었더라도 다른 루틴이 실행되는 동안 잠시 suspend를 시켰다가 바쁜게 끝나고 나면 다시 멈춘 곳에서부터 다시 재시작해서 나머지 작업을 끝내는 비동기 프로그래밍이 가능하게 된다. 코루틴은 스레드가 아니다. 코루틴 구조 Coroutine Scop..