본문 바로가기

전체 글

(32)
Navigation Component 사용하기 Navigation Component를 사용해서 화면 전환하는 것을 알아보자. Navigation Component에 대해서 간단히 정리해보면 nav_graph.xml에 Navigation에 사용될 화면들을 정의해두고 Java에서 이것을 사용해서 화면전환을 하는 구조이다. 크게 Navigation을 실행하는 NavController가 있고, 화면이 전환되는 영역인 NavHostFragment가 있다. 화면 단위는 Destination이라는 용어로 부르고 Fragment를 사용해서 구성된다. 1. Destination 추가하기 오늘은 task_list에서 addEditTaskFragment로 화면전환을 할 것이다. 두 목적지 사이에 화살표는 Action이라고 불린다. 한 화면에서 다른 화면으로 이동할 수 ..
Fragment에 리스트 출력하기 Part.2 앞에서 인터페이스를 사용해서 이미 생성된 Fragment에게 데이터를 전달하는 방법을 구현해보았다. 하지만 그것보다 간단하게 같은 기능을 수행하도록 할 수 있다. 우리에게는 이미 Activity와 Fragment가 공유하고 있는 ViewModel 영역이 있다. ViewModel은 Activity보다 긴 생명주기를 가지고 View 간에 데이터를 공유하기 위한 목적을 가지고 있다. ViewModel에 Filter라는 라이브데이터를 추가하고 Activity에서 메뉴를 선택 시에 LiveData에 값을 포스트하고 TaskListFragment는 Filter를 관찰하고 있다가 변화를 감지했을 때 리스트를 바꾸어 업데이트하면 된다. 새로운 인터페이스 정의도 필요없고, 복잡한 형변환도 필요없다. 이미 구현된 뷰모델이..
Fragment에 리스트 출력하기 Part.1 요구사항 다시 짚어보기 이번에 구현하려고 하는 기능은 Fragment에 RecyclerView를 사용해서 데이터를 리스트 형태로 출력하는 것이다. 이때 메뉴 선택에 따라 리스트에 담길 데이터의 내용이 달라질 수 있다. Fragment + RecyclerView라는 구성의 XML 뷰라는 동일한 틀을 가지고 여러 개의 스크린을 보여줄 수 있어야 한다. 현재 1 Activity - Mutiple Fragments 구성을 사용하고 Navigation을 위해 Navigation Component를 사용해보려고 한다. 데이터의 종류는 Activity에 속해있는 Navigation Drawer의 메뉴 선택에 따라 결정된다. 즉 Drawer의 메뉴를 선택 시에 다른 내용의 리스트를 출력하는 것이 목표이다. 접근법 #1..
ViewModel Testing 코드 작성하기 1. ViewModel의 역할 ViewModel은 MVVM 패턴에서 Data Source와 View를 연결하는 컴포넌트이다. ViewModel의 첫번째 목적은 Data를 꺼내서 보관하고 필요한 때에 UI에게 제공하는 기능을 담당한다. View 자체에서 데이터를 보관하면 화면회전과 같은 Configuration Change 상황에서 데이터를 관리하는데 어려움이 발생한다. 하지만 ViewModel은 Activity보다 생명주기가 더 길기 때문에 ViewModel이 홀드하고 있는 데이터는 Activty가 새롭게 그려져도 다시 사용할 수 있게 된다. 기존의 다른 패턴들과 달리 ViewModel은 View에 대한 레퍼런스를 가지고 있지 않다는 것이 또 다른 큰 특징이다. MVP 패턴에서는 View - Presen..
Room Database Testing Code 작성하기 1.What is Room? 애플리케이션에서 사용될 데이터를 Local Database에 저장할때 사용되는 라이브러리이다. 안드로이드는 기본으로 SQLite를 사용하여 Persistence data를 보관하는데, Room을 사용하면 SQLite를 쉽게 다룰 수 있다. 원시 SQL 쿼리의 사용을 지양하고 Dao라는 인터페이스를 통해 앱 내부에서 사용되는 객체를 사용하여 쉽게 데이터 입출력을 할 수 있게 도와준다. 구글에서 지원하는 Architecture Components의 핵심 라이브러리 중에 하나로 LiveData, ViewModel 등과 함께 적극적으로 사용이 권장되고 있다. Entity : 데이터 모델 클래스에 해당한다. Database 내에서 테이블이 되는 단위이다. Dao : Database A..
실제로 앱을 개발하면서 안드로이드 프로그래밍 배우자. Purpose 안드로이드 앱 개발능력 향상을 위해서 간단하지만 실제로 사용할 수 있는 앱을 만들어본다. 실제 사용해보고 불편한 점을 보완하는 과정을 경험하기 위함이다. 여러가지 앱을 고려한 끝에 ‘리마인더’ 앱을 만드는 것으로 결정했다. Overview 리마인더 앱은 등록한 할 일의 데드라인에 맞춰 사용자에게 알림을 하는 앱이다. 리마인더 앱을 선택한 것은 네트워크 없이도 기능하는 Offlinebase app이다. Alarm & Notification에 대해 배울 수 있다. 참고할 수 있는 예제가 많다. 네트워크 기능은 서버가 필요하고 실제로 내가 실생활에 사용할 수 있는 유용한 데이터를 제공하는 API는 비용이 소요된다. 네트워크 작업없이 오프라인으로 동작하는 앱을 통해 네트워크 파트를 배제한 나머지 ..
최소 기능 제품, Minimum Viable Product(MVP) Iterative and Icremental Development를 강조한다. 완전하게 설계된 하나의 프로젝트를 진행하는 것보다 먼저 작은 기능을 구현한 프로젝트에다 반복적으로 기능을 추가하면서 개선하는 방식의 개발이 더 효율적이다는 개발방법론이다. MVP wiki link 두가지 시나리오의 비교 위 그림의 두 가지 시나리오를 비교해보며 조금 더 자세히 알아보자. 고객은 물건을 편하게 옮기기 위한 제품을 만들기를 원하고, 스스로 조사한 결과 자동차라는 결과물을 만들어달라고 의뢰하였다. 최적의 분업화로 최적의 퍼포먼스를. 첫번째 시나리오를 나타낸 그림이다. 최종목표인 자동차를 만들기 위해서 필요한 부품들을 각각 다른 팀에 의뢰하였다. 개발이 완성된 부품은 하나로 조립되어 자동차가 완성된다. 이때 바퀴를 만..
CoffeeMaker 예제로 알아보는 Dagger Part1. CoffeeMaker 예제로 알아보는 Dagger Dagger 예제로 흔히 접할 수 있는 CoffeeMaker 예제를 살펴보고 Dependency Injection을 알아본다. Step1.완성품 CoffeeMaker 보통 우리가 커피메이커를 사용할 때 작동버튼 하나만 알면 커피를 만들 수 있다. 기계 내부에서 어떻게 물이 데워지고 커피가 추출되는지는 모르지만 Brew버튼 하나만 알면 커피메이커를 사용할 수 있다. 이를 코드로 표현해보면 CoffeeMaker coffeeMaker = new CoffeeMaker(); coffeeMaker.brew(); 커피메이커 객체를 생성하지만 커피메이커 내부에 사용되는 히터와 펌프는 외부에 노출되지 않는다. Step2. 외장형 부품을 사용하는 CoffeeM..