Android
-
Tests App on Android(1)Android 2021. 6. 28. 17:54
테스트를 하는 이유 장애에 관한 신속한 피드백 개발 주기에서 조기 장애 감지 코드를 최적화할 수 있도록 하는 더 안전한 Code Refactoring 기술적 문제를 최소화하는 안정적인 개발 속도 안드로이드 테스트 종류 Unit Test - 일반적으로 코드의 유닛 단위(메소드, 클래스, 컴포넌트)의 기능을 실행하는 방식 - JVM 상에서 실행되는 local unit tests - 실제 기기 및 에뮬레이터에서 실행되는 instrumented unit tests Integration Tests - 단위 테스트가 완료된 모듈들을 합쳐서 하는 테스트 - 앱에서 데이터가 가공되는 로직 테스트 UI Tests - 사용자 인터랙션(버튼 클릭, 텍스트 입력 등) 테스트 - 단일 앱 UI tests - 멀티 앱 UI te..
-
Room DatabaseAndroid 2021. 6. 14. 14:25
안드로이드 아키텍처 컴포넌트에 속하는 Room 라이브러리는 SQLite에 대한 추상화 레이어를 제공하여 원활한 데이터베이스 액세스를 지원하는 동시에 SQLite를 완벽히 활용한다. build.gradle 파일에 다음 dependencies를 추가한다. (Kotlin 사용시) dependencies { def room_version = "2.3.0" implementation "androidx.room:room-runtime:$room_version" // To use Kotlin annotation processing tool (kapt) kapt "androidx.room:room-compiler:$room_version" // To use Kotlin Symbolic Processing (KSP) k..
-
ConstraintLayout(2)Android 2021. 6. 13. 10:51
constraint(제약조건) Chain은 뷰간의 상호 참조 연결을 할 때, 뷰들을 어떤 방식으로 연결 시킬시켜 표현할지를 결정한다. 수평기준 가장 왼쪽 있는 View 또는 수직 기준으로 가장 상단에 있는 View가 기준(Head)이 된다. chain 스타일은 여러 형태가 존재 할 수 있는데 layout_constraintHorizontal_chianStyle 또는 layout_constraintVertical_chainStyle을 연결된 뷰들의 head에만 적어주면 된다. 기본 chain스타일은 CHAIN_SPREAD이다. Example Spread Chain View들을 골고루 펼쳐 여백을 같게 한다(기본값) Packed chain View들이 똘똘 뭉치게 되고 부모뷰로부터의 여백을 같게 합니다. 여..
-
ConstraintLayout(1)Android 2021. 6. 11. 12:58
ConstraintLayout는 layout에 배치되는 뷰들에 여러 제약(Constraint)을 적용하여 각 뷰의 위치와 크기를 결정한다. 여기서 말하는 "제약(Constraint)"이란, 각 요소들의 최종 위치와 크기를 결정하게 될 조건, 예를 들어, 특정 뷰 왼쪽 사이드를 지정된 뷰의 오른쪽 사이드에 맞추거나, 뷰의 왼쪽, 오른쪽 사이드를 각각 부모 레이아웃의 왼쪽, 오른쪽 사이드에 맞추는 것 등을 말하며, 이러한 각각의 제약(Constraint)은 컨스트레인트레이아웃이 가지는 하나의 레이아웃 속성으로 매핑된다. ConstraintLayout을 프로젝트에 추가 build.gradle 파일에 다음 dependencies를 추가 dependencies { implementation "androidx.co..
-
Room And CoroutinesAndroid 2021. 6. 10. 09:27
Room-Coroutines을 요약, 정리하였다. 앱에서 coroutines과 Room을 사용하려면 Room 2.1로 업데이트하고 build.gradle 파일에 새 종속성을 추가한다. (Kotlin 1.3.0 및 Coroutines 1.0.0 이상 필요) implementation "androidx.room:room-coroutines:${versions.room}" 이제 DAO method를 업데이트하여 일시 중단(suspension) 기능을 사용할 수 있다. @Dao interface UsersDao { @Query("SELECT * FROM users") suspend fun getUsers(): List @Query("UPDATE users SET age = age + 1 WHERE userId ..
-
LiveData beyond the ViewModelAndroid 2021. 6. 4. 10:41
LiveData beyond the ViewModel - Reactive patterns using Transformations and MediatorLiveData을 요약, 정리하였다. LiveData beyond the ViewModel — Reactive patterns using Transformations and MediatorLiveData Reactive architecture has been a hot topic in Android for years now. It’s been a constant theme at Android conferences, normally… medium.com LiveData는 Observer의 수명주기를 알고있는 simple observable이다. data so..
-
LiveDataAndroid 2021. 5. 30. 16:53
LiveData란 LiveData는 observable data holder class로 안드로이드 Lifecycle에 따라 데이터를 관리한다. 예를 들어 Activity에 선언되어 있는 LiveDate의 경우 Activity의 생명주기가 Started, Resumed 상태이면 데이터의 변경을 처리하지만 다른 Activity로 넘어가있는 Stoped등의 상태일 때는 처리하지 않는다. 구글 문서를 참고하면 아래와 같은 장점을 확인할 수 있다. UI와 데이터 상태의 일치 보장 : observable 패턴을 사용하기 때문에 데이터의 변화를 observer 객체에 알리다. 메모리 누수 없음 : observer는 lifecycle 객체에 결합되어 있으며 연결된 수명 주기가 끝나면 자동으로 삭제된다. 최신 데이터 ..
-
Android Kotlin Fundamentals - ViewModel(2)Android 2021. 5. 30. 09:37
Activity ViewModel을 활용한 Fragment 간 데이터 공유 Fragment가 N 개인데, Data의 공유가 필요한 경우 Fragment에서 처리한 데이터에 따라 Activity의 데이터 갱신이 필요한 경우 보통 위와 같은 이유로 sharedViewModels를 사용하는 케이스가 있다. 1. fragment-ktx를 사용하지 않을 경우 SharedViewModel, Fragment들을 아래와 같이 간단하게 구현 class SharedViewModel : ViewModel() { val message = MutableLiveData() fun sendMessage(msg:String){ message.value = msg } } class MessageReceiverFragment:Fragm..