Android: 150개의 글
MVVM (Model-View-ViewModel) 패턴은 비즈니스 로직과 사용자 인터페이스(UI)를 완전히 분리함으로써 쉬운 유지관리와 테스트를 진행할 수 있으며 기본적으로 모듈화를 진행하기 때문에 코드 재사용성도 뛰어납니다. 기존의 액티비티(Activity)에 비즈니스 로직과 UI 로직과 같은 복잡한 기능을 넣게 되면 액티비티가 무거워지고 종속성이 너무 강해 테스트가 힘들고 유지보수가 힘들어집니다. MVVM 패턴은 기본적으로 Model과 View 그리고 ViewModel과 같이 각자의 역할에 맡는 기능들을 모듈화하기 때문에 유지관리 및 테스트가 용이해집니다. 1. View View는 Activity나 Fragment 같은 화면에 표현되는 레이아웃을 정의합니다. View는 기본적으로 비즈니스 로직을 포함..
프로젝트를 진행하면서 RecyclerView의 Data Set에 동적으로 아이템을 추가하여 notifyDataSetChanged() 함수를 통해 ReBinding을 시켜야하는 일이 있었습니다. 문제없이 실행되는가 싶더니 데이터가 추가 되고 RecyclerView에 반영이 되는 순간 View가 깜빡 거리는 현상이 생기더군요. 해당 포스팅에서 Adapter의 notifyDataSetChanged 실행 시 RecyclerView의 깜빡 거리는 현상을 해결하는 방법을 알아보겠습니다. 1. 깜빡거리는 원인 Adapter가 관리하는 Data Set에 데이터가 추가 / 삭제 / 갱신등이 이루어지면 notifyDataSetChanged()를 호출하여 Adapter에게 DataSet이 변경되었으니 갱신하라고 알려줘야 합..
플로팅 액션 버튼(Floating Action Button)은 화면에 떠있는 원형의 버튼으로 머터리얼 디자인에서 자주 사용되는 기본 위젯입니다. 플로팅 액션 버튼(Floating Action Button)을 구현하는 방법은 일반 버튼 위젯을 구현하는 방법과 비슷합니다. 다만 기본적으로 ImageView를 상속받는 위젯이기 때문에 버튼에 표현할 아이콘을 지정할 수 있으며 버튼을 클릭하였을 때 서브 버튼이 나열이 되도록 구현이 가능합니다. 물론 일반 버튼처럼 사용자가 발생한 클릭 이벤트에 대한 처리도 가능합니다. 1. 화면에 FloatingActionButton 사용법 1.1 xml 레이아웃 리소스 추가 FAB 위젯을 레이아웃에 추가하는 방법은 일반 위젯들을 추가시키는 방법과 동일합니다. FAB에서 사용되는..
다양한 크기의 화면을 가지는 단말기가 늘어남에 따라 한 화면에 여러 개의 화면 요소를 원하는 수요가 늘어가고 있습니다. 대표적으로 화면의 크기가 큰 태블릿 PC와 같이 화면의 크기가 큼에 따라 복잡한 레이아웃 구성과 뷰 위젯 배치들로 인해 기존의 Activity를 통한 레이아웃 구성만으로는 구현하기 버거운 면이 있었습니다. 이를 커버하기 위해 나온것이 안드로이드 3.0(API 11)부터 추가된 개념인 프래그먼트(Fragment)입니다. 프래그먼트는 액티비티 내에서 화면 UI의 일부를 나타냅니다. 여러 개의 프래그먼트를 조합하여 액티비티가 출력하는 한 화면의 UI를 표현할 수 있으며 하나의 프래그먼트를 다른 액티비티에 재사용할 수 있습니다. 액티비티(Activity)처럼 하나의 독립된 모듈처럼 실행되기 때..
json은 JavaScript Object Notation의 약자로 데이터를 구조적으로 표현하기 위한 일종의 포맷(Format)으로 네트워크를 통해 데이터를 주고받을 때 사용되는 경량의 데이터 형식을 의미합니다. 안드로이드에서 Json을 파싱 하기 이전에 먼저 json이 어떤 형식의 데이터 포맷인지 알아보고 가겠습니다. 1. json 기본 개념 { "Movies" : [ { "title" : "미션임파서블", "grade" : "15세 관람가", "category" : "액션" }, { "title" : "어벤져스", "grade" : "12세 관람가", "category" : "액션" }, { "title" : "범죄도시", "grade" : "19세 관람가", "category" : "범죄/스릴러" ..
1. CountDownTimer를 활용한 타이머(Timer) 구현 1.1 화면 UI를 위한 레이아웃 리소스 ▼ 타이머의 시간 경과를 표시하기 위한 TextView와 타이머 시작을 위한 Button 한 개와 타이머를 Reset 하기 위한 Button 한 개를 배치한 형태입니다. 포스팅 뒤에 나오는 Timer/TimerTask 구현예제도 동일한 레이아웃 리소스를 사용합니다. 1.2 CountDownTimer 상속받는 MyTimer 클래스 구현 class MyTimer extends CountDownTimer { public MyTimer(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval); } @Over..
안드로이드에서는 앱의 데이터를 효율적으로 관리하기 위한 저장소로 SQLite라는 데이터베이스(DataBase)를 제공하고 있습니다. SQLite는 오라클(Oracle)이나 MySql와 달리 소규모 데이터를 관리하고 사용하는데 적합한 관계형 데이터베이스입니다. 소규모 데이터를 관리하는데 최적화된 만큼 대규모 데이터베이스에서 사용하는 각종 기능을 모두 덜어내어 속도가 빠르며 가볍습니다. SQLite는 SQLiteDatabase 클래스를 통해 사용할 수 있습니다. 1. 테이블 생성하기 항목 설명 테이블 필드명 데이터 타입 특성 ID _id integer 유일 값, 자동 증가되는 값 영화제목 title text 장르 category text 이용 등급 grade text 해당 데이터베이스(DataBase)의 테..
안드로이드의 RecyclerView는 앱에서 관리되는 데이터 집합을 화면에 유연하게 표시할 때 사용되는 뷰 그룹(View Group)입니다. 1. RecyclerView 구현 구현 예제는 포스팅 초입에 봤던 이미지처럼 영화 포스터를 포함한 영화 리스트를 보여주는 예제를 RecyclerView를 통해 구현하는 예제입니다. 1.1 외부 라이브러리 추가 build.gradle ▼ build.gradle 파일에 RecyclerView와 CardView를 사용하기 위해 위와 같이 라이브러리를 추가합니다. 1.2 메인 액티비티 레이아웃 리소스 ▼ 메인 화면을 표시하기 위한 레이아웃 리소스에 RecyclerView를 배치한 형태입니다. 1.3 데이터 클래스 정의 package com.springsthursday.re..
내비게이션 드로어(Navigation Drawer)는 앱에서 사용 가능한 기능을 탐색할 수 있도록 Menu를 제공하는 화면입니다. 기본적으로 화면의 가장자리에 숨겨져 있으며 왼쪽에서 오른쪽으로 스와이프 동작을 수행하거나 App Bar의 아이콘을 클릭하여 화면에 표시할 수 있습니다. 1. 드로어 네비게이션(Drawer Navigation) 구현 1.1 메인 액티비티(Activity) 레이아웃 리소스 Drawer Navigation을 화면에 추가하기 위해서는 화면의 최상단 레이아웃은 DrawerLayout이 배치되어야 합니다. 그 아래 자식 뷰들의 배치 순서는 Main 화면에 표시되는 자식 뷰들이 먼저 오고 Drawer로 사용될 뷰의 경우는 마지막으로 배치하게 됩니다. Main 화면에 배치되는 위젯은 Too..
AsyncTask 클래스는 안드로이드에서 요구하는 메인 스레드(Main Thread)와 작업 스레드의 분리 구조를 보다 쉽게 구현하도록 도와주는 추상 클래스입니다. 1. AsyncTask 주요 재정의 함수 안드로이드의 AsyncTask 생명주기 관리는 다섯 가지의 생명주기 함수들을 재정의함으로써 관리할 수 있습니다. AsyncTask 재정의 함수 doInBackground() 함수를 제외한 나머지 4개의 함수는 전부 Main Thread에서 실행되는 함수들입니다. AsyncTask를 실행하면 가장 먼저 onPreExecute() 함수가 호출되며 doInBackground() 함수가 호출되기 직전에 호출됩니다. 일반적으로 해당 함수에서는 사용자 UI에 ProgressBar를 표시하여 본격적인 작업 스레드에..