Programming/Android
JetPack AAC: LiveData
LiveData LiveData Jetpack 의 lifecycle - extensions 라이브러리에 있는 데이터 홀더 클래스 이다. Room 에서 LiveData를 사용한다. 라이브 데이터의 목적 앱의 서로 다른 부분 간에 데이터 전달을 쉽게 만드는 것이다. 라이브 데이터는 스레드 간에도 데이터를 전달할 수 있어서, 백그라운드 스레드에서 메인 스레드로 데이터를 전달할 수 있다. Room DAO 의 쿼리에서 LiveData를 반환하도록 구성하면, Room은 백그라운드 스레드에서 쿼리 작업을 자동 실행한 후그 결과를 LiveData 객체로 반환해준다. 즉, 액티비티나 프래그먼트에서는 LiveData 객체를 관찰하도록 설정만 하면 자동으로 처리가 된다는 말이다.그리고 LiveData 객체가 준비되면 메인 ..
Thread
Thread 안드로이드에서의 스레드, 메인 스레드 스레드는 단일의 실행 시퀀스다. 스레드 내부의 코드는 한 단계씩 실행된다. 모든 안드로이드 앱은 메인 스레드로 시작된다. 그러나 메인 스레드는 미리 정해진 순서로 실행되지 않는다. 대신에 무한 루프에 머물면서 사용자나 시스템이 유발한 이벤트를 기다리는 것이다. 그리고 이벤트가 발생하면 응답하는 코드를 실행한다. 메인 스레드는 액티비티 시작, UI 관련 처리를 주로 하기 때문에 UI 스레드라고도 한다. 백그라운드 스레드 앱을 실행하다보면, 앱이 중지되는 경우가 있다. 이런 경우를 ANR(Application Not Responding)이라 한다. 앱이 응답을 안한다는 의미이다. ANR = 앱 미응답 백그라운드 스레드를 앱에 추가할 때 고려할 규칙이 두가지 ..
Repository Pattern
Repository Pattern Repository Pattern ? 저장소 패턴이다. 저장소 클래스는 저장소를 구현한다. 또한 단일 또는 여러 소스로부터 데이터를 액세스하는 로직을 캡슐화하고, 로컬 데이터베이스나 원격 서버로부터 특정 데이터셋을 가져오거나 저장하는 방법을 결정한다. 그리고 UI코드에서는 저장소에 모든 데이터를 요청한다. UI는 어떻게 데이터를 저장하거나 가져오는지에 관여하지 않는다. 이러한 작업은 저장소에서 따로 처리한다. 저장소 클래스는 싱글톤이다. 데이터를 가져오는 것만 처리하는 코드는 아래와 같다. package com.bignerdranch.android.criminalintent import android.content.Context // 이 저장소 클래스는 싱클톤이다. : ..
JetPack AAC: Room
Room 룸은 재트팩 아키텍쳐 컴포넌트 라이브러리 이다. 데이터베이스 설정과 사용을 쉽게 해준다. 룸을 사용하면 애노테이션이 지정된 코틀린 클래스로 데이터베이스 구조와 쿼리를 정의할 수 있다. 룸의 구성은? API : 데이터베이스를 정의하고 인스턴스를 생성하기 위해 상속받는 클래스들이 API에 포함되어 있다. Annotation (@) : 데이터베이스에 저장할 필요가 있는 클래스, 데이터베이스를 나타내는 클래스, 데이터베이스 테이블을 사용하는 함수들을 정의하는 클래스 등을 나타내기 위해 애노테이션을 사용한다. Compiler : 지정한 애노테이션을 컴파일해서 데이터베이스 구현체를 생성한다. 종속성 추가 ... plugins { id 'com.android.application' id 'kotlin-and..
Layout Design
Layout Design 레이아웃 디자인 창은 ConstraintLayout에서 많이 사용한다. 왼쪽, 컴포넌트 트리에서 LinearLayout을 우클릭 하면 위와 같이 Convert LinearLayout to ConstraintLayout 으로 변경이 가능하다. 제약을 제어하는 툴바가 상단에 생성된다. 각 툴의 의미는 아래와 같다. 보기 옵션 | 자동연결 활성화/비활성화 | 0dp | 모든 제약 삭제 | 제약 추론 | 가이드 라인 보기옵션 : Show All Constraints 를 선택하면 레이아웃 디자인과 청사진 모두에 설정된 제약을 보여준다. Show System UI 를 선택하면 레이아웃과 함께 장치 화면 맨 위의 상태 바나 앱 이름을 포함한 앱 등도 같이 볼 수 있다. 자동 연결 활성화/비활..
Emulator(AVD) & Physical Device
Emulator(AVD) & Physical Device AVD : Android Virtual Device AVD 을 사용하면, 자주 겪는 문제가 있다. 무슨 이유인지 애뮬레이터가 멈추거나, 앱을 Run 해도 뭔가 부드럽게 진행이 안되고 원인불명으로 핸드폰이 약간 망가진거 같아 보인다. 이러한 경우, 그냥 애뮬레이터를 지웠다가 재설치하는게 가장 좋다. 그러나 AVD를 지우는게 또 문제가 된 경우가 많다. 제거가 안되는 것이다. 이런 경우 어떻게 해야할까? 여러 방법을 사용해봤지만, 그냥 이 방법이 가장 빠르게 다시 원하는 작업을 할 수 있는 것 같다. 1. AVD를 직접 찾아서 지워본다. 폴더 위치를 찾아가서 지우는 것이다. 2. AVD의 창을 꺼주는 것이다. 3. 최종적으로 android , wind..
RecyclerView
RecyclerView RecyclerView 이해하기 재순환(재활용)뷰는 뷰 그룹의 서브 클래스 이다. 항목 뷰(item view) 라고 하는 자식 View 객체들의 리스트를 보여준다. 각 항목 View는 재순환(재활용)뷰의 행으로 나타나며 데이터 저장소에서 가져온 하나의 객체를 나타낸다. 그렇다고 재순환뷰가 많은 양의 데이터를 물고서 보여주는 것이 아니다. 한 화면에 충분히 채워질 만큼의 데이터 카드(아이템)만 보여주고, 사용자가 스크롤을 하면 그 제스처 이벤트에 맞춰서 해당되는 부분의 데이터를 끌어와서 보여준다. 이렇게 하면 화면 흐름이 부드럽게 보여지는 것이다. 즉 View라는 아이템 바구니를 그대로 두고, 데이터만 싹 바꾸는 원리라고 보면 된다. 이렇게 하면, 아래에 나오는 ViewHolder ..
Fragment
Fragment 프래그먼트에대해 알아보기전 알면 도움이 되는 것들 인스턴스란 (헷갈려? 이거봐) 싱글톤이란 (뭐지 정확히? 이거봐) Fragment 란 사전적으로는 파편이라는 뜻을 가진 단어이다. 즉, 활동에서의 파편들을 의미한다 대충 이해하고 들어가보자.안드로이드 개발자에서 공식 정의는 아래와 같다. Fragment는 앱 UI의 재사용 가능한 부분을 나타냅니다. 프래그먼트는 자체 레이아웃을 정의 및 관리하고 자체 수명 주기를 보유하며 자체 입력 이벤트를 처리할 수 있습니다. 프래그먼트는 독립적으로 존재할 수 없고 활동이나 다른 프래그먼트에서 호스팅 되어야 합니다. 프래그먼트의 뷰 계층 구조는 호스트 뷰 계층 구조의 일부가 되거나 여기에 연결됩니다. [공식문서보기] 프래그먼트를 사용하는 앱은 올바른 방법..