깨알 개념/Android 73

[Android] Navigation - 환경 설정

#1 Navigation#1-1 액티비티 및 프래그먼트 구성의 트렌드요즘 안드로이드 개발의 트렌드는 하나의 액티비티, 여러 개의 프래그먼트다. 이는 구글의 권장사항이기도 하다. 이 트렌드에서 단일 액티비티는 일종의 '빈 그릇'으로서만 의미를 가진다. 유의미한 화면 컨텐츠는 전부 프래그먼트로 구현하기 때문이다. #1-2 Navigation architecture component library 탐색  |  Android 개발자  |  Android DevelopersAndroid Jetpack의 탐색 구성요소를 사용하여 앱에서 탐색 구현developer.android.com그러나, 액티비티와 프래그먼트 간의 전환(Navigation)과 흐름을 일일이 구현하는 것은 골치아픈 일이다. 이 때, 안드로이드 Je..

[Android] Fragment의 생명주기

#1 이전 글 [Android] Activity의 생명주기#1 Android Application의 시작 (AndroidManifext.xml) ... 우리가 앱 아이콘을 누르면, 안드로이드 시스템은 해당 앱의 Launcher Activity를 실행시킨다. AndroidManifext.xml의 등록된 액티비티 중에서 태그를 가지고 kenel.tistory.com프래그먼트는 액티비티와 비슷하지만, 가장 주요한 차이점은 홀로 설 수 없으며 반드시 액티비티나 또 다른 프래그먼트에 종속되어 동작한다는 것이다. 프래그먼트는 액티비티처럼 생명주기를 가지며, 종속된 액티비티나 또 다른 프래그먼트의 생명주기에 영향을 받기도 한다. 이전 글에 이어 이번에는 Fragment의 생명주기를 살펴본다. #2 Fragment의 ..

[Android] Activity의 생명주기

#1 Android Application의 시작 (AndroidManifext.xml)                                                                                    ...    우리가 앱 아이콘을 누르면, 안드로이드 시스템은 해당 앱의 Launcher Activity를 실행시킨다. AndroidManifext.xml의 등록된 액티비티 중에서 태그를 가지고 있는 Activity가 Launcher Activity로 설정된다. 프로젝트를 생성하면 기본적으로 존재하는 Launcher Activity가 바로 우리가 잘 아는 MainActivity다. 이 Launcher Activity라는 진입점을 통해 앱이 실행되면, 비로소 액티비티의 생명..

[Android] MVVM 구조 한눈에 보기

#1 안드로이드 앱의 '전통적인' 방식 vs MVVM 패턴#1-1 도식도와 종속성화살표는 클래스 간의 종속성을 나타낸다. 예를 들어, View는 ViewModel에 종속된다. 종속의 사전적 의미는 '자주성이 없이 주가 되는 것에 딸려 붙음'이다. 종속은 '알아야 한다'라는 말로도 표현할 수 있다. 따라서 View는 ViewModel에 대해 알아야 한다. 반면, ViewModel은 View를 몰라도 된다. ViewModel을 설계할 땐 View에서 뭘 어떻게 할지 전혀 신경쓰지 않아도 된다는 것이다 (대신, ViewModel은 Model에 대해 종속적이므로 Model를 참조하며 설계해야 한다). View를 설계할 땐 ViewModel을 알아야 한다. '알아야 하는 쪽'에서 '몰라도 되는 쪽'으로 화살표를 ..

[Android] LiveData - 양방향 데이터 바인딩의 3가지 방법

#1 단방향 데이터 바인딩#1-1 단방향과 양방향지금까지 해온 Data Binding은 단방향(One Way) 데이터 바인딩이었다. Model 또는 ViewModel에서 View로 가는 흐름으로만 데이터가 갱신된다. 역은 성립하지 않는다. 역이 성립하지 않는 게 꼭 나쁜 것도 아니다. 마치 인터넷 쇼핑몰에서 어떤 물건의 표시된 가격을, 브라우저의 개발자 모드를 통해 변경한다고 서버에 저장된 실제 가격이 변하지 않는 것과 같다. 만에 하나 변하는 일도 없어야하고 말이다. #1-2 수정할 샘플 앱 [Android] LiveData - 암시적으로 '관찰'하기#1 ViewModel 속에 LiveData가 있는 샘플 앱 [Android] ViewModel - View에 객체(ViewModel) 전달 #1 개요 #..

[Android] LiveData - 암시적으로 '관찰'하기

#1 ViewModel 속에 LiveData가 있는 샘플 앱 [Android] ViewModel - View에 객체(ViewModel) 전달#1 개요 #1-1 Data Binding과 ViewModel [Android] Data Binding - View에 객체 전달 #1 객체 전달의 필요성 #1-1 이전 글 Data Binding - 기초 #1 데이터 바인딩 사용 전 #1-1 예시 앱 위과 같은 간단한 앱이 있다. Button을kenel.tistory.com위 게시글의 완성된 앱을 토대로 코드를 수정한다. #2 명시적 LiveData.observe() [Android] LiveData - 기초#1 개요 #1-1 LiveData LiveData 개요 | Android 개발자 | Android Develo..

[Android] ViewModel - View에 객체(ViewModel) 전달

#1 개요#1-1 Data Binding과 ViewModel [Android] Data Binding - View에 객체 전달#1 객체 전달의 필요성 #1-1 이전 글 Data Binding - 기초 #1 데이터 바인딩 사용 전 #1-1 예시 앱 위과 같은 간단한 앱이 있다. Button을 누르면, EditText의 text가 바로 위에 있는 TextView의 text에 대입된다. 이kenel.tistory.com데이터 바인딩을 이용해 View에 객체를 보낼 수 있었다. 그렇다면, ViewModel의 객체 또한 같은 방식으로 보낼 수 있을 것이다. #1-2 ViewModel이 쓰인 샘플 앱 [Android] LiveData - 기초#1 개요 #1-1 LiveData LiveData 개요 | Android..

[Android] LiveData - 기초

#1 개요#1-1 LiveData LiveData 개요  |  Android 개발자  |  Android DevelopersLiveData를 사용하여 수명 주기를 인식하는 방식으로 데이터를 처리합니다.developer.android.comLiveData. 문서적인 정의는 Data의 변경을 관찰할 수 있는 데이터 홀더 클래스고, 말 그대로 해석하면 살아있는(live) 데이터(data)다. Activity, Fragment, Service에 있는 Data, 예를 들어 어떤 변수 A가 있고 그 A를 어떤 TextView에 표시해놓은 상황을 생각해 보자. A의 값이 변경되면, TextView에 변경된 A값을 다시 할당해야한다. LiveData는 그 귀찮은 할당 과정을 프로그래머가 생략할 수 있게 만들어준다. L..

[Android] ViewModel - 뷰 모델에 인자(Argument) 전달 (ViewModelFactory)

#1 ViewModelProvider 클래스 분석#1-1 수정할 샘플 앱 [Android] View Model - 기초#1 View Model의 필요성#1-1 예제버튼을 누르면 TextView의 text가 1씩 증가하는 예시 앱이다. MainActivity.kt 코드는 다음과 같다. // package com.example.viewmodelbasics import androidx.appcompat.app.AppCompatActivity import androkenel.tistory.com위 게시글의 '완성된 앱'을 수정해서, ViewModel 클래스가 인자(Argument)를 받게 만들어본다. 그냥 class sampleViewModel(args: Int) : ViewModel() { ... }와 같이 ..

[Android] ViewModel - 기초

#1 View Model의 필요성#1-1 예제버튼을 누르면 TextView의 text가 1씩 증가하는 예시 앱이다. MainActivity.kt 코드는 다음과 같다. // package com.example.viewmodelbasicsimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport androidx.databinding.DataBindingUtilimport com.example.viewmodelbasics.databinding.ActivityMainBindingclass MainActivity : AppCompatActivity() {    private lateinit var binding: ActivityMai..