ViewModel이란? ViewModel은 비즈니스 로직 또는 화면 수준 상태 홀더이다. UI에 상태를 노출하고 관련 비즈니스 로직을 캡슐화한다. ViewModel을 사용하게 되면 Activity 간에 이동하거나 화면 전환을 따를 때 UI가 데이터를 다시 가져올 필요가 없다. 이러한 ViewModel은 위 클래스를 사용하지 않고, 일반 클래스로도 구현이 가능하다. 그러나 이는 Activity와 탐색 대상 간에 이동할 때 문제가 될 수 있다. 인스턴스 상태 저장 메커니즘을 사용하여 데이터를 저장하지 않을 경우 해당 데이터가 소멸된다. 이러한 점을 해결하기 위해 ViewModel은 데이터 지속성을 위한 편리한 API를 제공한다. ViewModel의 이점 UI 상태를 유지할 수 있다. 비즈니스 로직에 대한 액..
서론 보통 지금까지 개발을 하면서, Android 클래스에서 뷰에 접근하려고 할 때 findViewById 방식을 사용해 왔다. 위의 방식을 사용하면서 접근해야 할 View가 많아지면 코드의 양도 많아지고 불편했다. 자바로만 안드로이드 개발을 하다 새롭게 코틀린을 접하게 되면서 바인딩이라는 개념에 대해 접하게 되었는데, findViewById의 방식보다는 어렵지만 필요성을 느껴 정리해보려고 한다. View 접근 가장 흔하게 사용해왔던 방식인, findViewById에 관해 먼저 이야기해 보자면, xml 파일(Layout)에서 뷰에 Id를 설정해준 뒤 소스에서 그 Id를 통해 접근하는 방식이다. TextView text1 = findViewById(R.id.text1); TextView text2 = fi..
앱 개발을 하다 보면, 실제 플레이스토어를 통해 배포하는 경우가 생길 것이다. 배포를 하고 나서 유지보수를 하는 과정에서 운영/개발 소스를 따로 분리하는 경우도 생길 것이고, 유료/무료 버전을 구분할 경우가 생길 것이다. 위와 같은 경우 하나의 소스 파일을 동일하게 사용하지만 그 안의 값들을 바꿔서 다른 버전들을 만들어 내는 것이다. 이러한 버전 관리를 알아보기 전에 앱 버전이 어떤 것인지 먼저 살펴보자. 1. App Version? 앱의 버전은 보통 1.2.3과 같은 형식으로 작성한다. 앞에서부터 Major, Minor, Patch 순의 숫자로 표기한다. 기존 버전과 호환되지 않게 API가 바뀌면 "Major" 버전을 올려준다. 기존 버전과 호환되면서 새로운 기능을 추가할 때는 "Minor" 버전을 올..
MVC/MVP/MVVM 패턴 학습 디자인 패턴을 사용하는 이유는 이러한 패턴 없이 자유롭게 코드를 작성하게 되면 규모가 커질수록 하나의 액티비티가 복잡하고 비대해져 문제가 생길 수 있고, 유지보수 즉면에서도 어려움이 있을 수 있고, 액티비티 특성상 LifeCycle에 따른 영향도 있을 것이며 데이터도 안전하게 다루지 못하기 때문이다. 따라서 LifeCycle의 영향, 코드의 복잡, 비대에 대한 영향, 앱 사용 환경 등 다양한 이유와 문제점을 바탕으로 좀 더 안전하고 깔끔한 개발을 위해 아키텍처 패턴이 생겨났다. MVC(Model View Controller) MVC 패턴에서 사용자 입력은 컨트롤러(Activity)를 통해 들어오며 컨트롤러는 모델과 상호작용을 통해 View(xml)을 업데이트한다. 이 때..
RecyclerView란? RecyclerView는 ListView와 유사한 형태로 대량의 데이터 세트를 효율적으로 표현할 수 있는 요소이다. 개발자가 데이터를 제공하고 각 항목의 모양을 정의하면 RecyclerView 라이브러리가 필요할 대 요소를 동적으로 생성한다. 이름에서 알 수 있듯이 RecyclerView는 개별 요소를 재활용한다. 항목이 스크롤되어 화면에서 벗어나더라도 RecyclerView는 뷰를 제거하지 않고 새 항목의 뷰를 재사용한다. 이렇게 뷰를 재사용하면 앱의 응답성을 개선하고 전력 소모를 줄이기 때문에 성능이 개선된다. 위의 설명이 RecyclerView와 ListView의 가장 큰 차이점이다. 그래서 실제로 안드로이드 개발을 하다 보면 RecyclerView가 많이 사용된다. Re..
1. SDK란? Android SDK(Android Software Development Kit)는 포괄적인 개발 도구를 포함하는 소프트웨어 개발 키트이다. SDK에는 API, 디버거, 라이브러리, QEMU 기반 핸드셋 애뮬레이터, 설명서, 샘플 코드 및 튜토리얼이 포함된다. 현재 지원되는 개발 플랫폼에는 리눅스, 맥, 윈도우가 포함된다. 2. SDK Version? Android Studio에서 프로젝트를 새로 생성할 시, Minimum SDK를 선택해야 한다. 이때 Android Studio에서 사용자들이 어떤 API 버전을 얼마나 사용하고 있는지 확인할 수 있다. 안드로이드에서는 버전 이름을 오레오, 레드벨벳 케이크, 티라미슈 등으로 지정해두었다. 3. Google Play와 targetSDK? 실..
Toast나 Dialog를 사용할 때 Activity 클래스에서는 this, 클래스명.this, getApplicationContext()를 사용하고, Fragment에서는 getContext()를 사용하곤 했다. 그런데 이들의 차이점을 알아야 할 필요가 있어서 정리를 해보려고한다. 1. Context - 추상 클래스 - 앱의 resource나 Android 시스템에서 제공하는 API에 대한 정보에 접근하기 위한 인터페이스 - 구현은 안드로이드 시스템에 의해 제공 Context는 액티비티 단위인 ActivityContext와 앱 단위인 ApplicationContext 두 가지로 나뉜다. 2. ApplicationContext ApplicationContext는 단어 그대로 Application과 관련된..
안드로이드 개발자라면 들어봤을 법한 Thread와 ANR에 관해 이야기해보려고 한다. 위의 주제에 앞서 먼저 프로세스에 대해 설명하면, 프로세스는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다. 기본적으로 같은 애플리케이션의 모든 구성 요소는 같은 프로세스와 스레드에서 실행되고, 대부분 애플리케이션은 이를 바꿔서는 안 된다. 그럼 스레드란 무엇일까? 1. Thread(스레드) - 스레드란 프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미한다. 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행한다. 또한, 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process)라고 한다. - 애플리케이션이 시작되면 시스템이 애플리케..
REST란? - REST(Representational State Transfer)란 자원을 이름으로 구분하여 해당 자원의 정보(상태)를 주고받는 모든 것을 말한다. 여기서 자원은 해당 소프트웨어가 관리하는 모든 것을 의미한다. REST는 www(월드 와이드 웹)과 같은 분산 하이퍼 미디어 시스템을 위한 소프트웨어 개발 아키텍처의 한 형식이다. 이러한 제약들을 준수했을 때 시스템이 RESTful 하다고 말한다. - REST의 기본 개념은 리소스다. 리소스의 예로는 잘 정의된 상태와 관계, 표준화된 작동방식과 형식을 가지고 전송되는 문서를 들 수 있다. 종종 타입이나 문서를 수정해야 할 때, API 혹은 그 서비스 어딘가에서 액션을 불러일으키지 않고 스스로 RESTful을 호출한다. - REST는 기본적으..
앱을 사용하다 보면, 위젯을 클릭했을 때 새로운 화면으로 전환이 되는 경우가 있다. 이렇게 화면이 전환될 경우 필요한 데이터를 전달할 수 있도록 안드로이드에서 지원한다. 데이터의 전달은 한 방향으로 데이터를 전달하는 것과 양방향으로 데이터를 전달하는 것으로 나눌 수 있다. 1. 한 방향 데이터 전달 한쪽 방향으로 데이터를 전달할 때는 putExtra()를 사용하여 데이터를 태그와 함께 담은 뒤 startActivity()를 이용하여 데이터를 전달한다. 이 후 세컨드 페이지에서 데이터를 사용하기 위해 인텐트를 활용하여 getExtra()로 데이터를 받아준다. 실제 안드로이드 스튜디오에서 putExtra를 작성했을 때 나오는 화면이다. 위의 사진처럼 다양한 종류의 자료형을 지원한다. 앞에 붙은 name이라는..