일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- HTTP
- notification
- DataBinding
- 알고리즘
- lifecycle
- onMeasure
- 안드로이드
- Behavior
- kotlin
- Coroutine
- onLayout
- ViewModel
- room
- hilt
- 코틀린
- LiveData
- sqlite
- 백준
- CustomView
- CoordinatorLayout
- recyclerview
- Navigation
- AppBarLayout
- Algorithm
- CollapsingToolbarLayout
- Android
- BOJ
- activity
- View
- 알림
- Today
- Total
목록Programming (프로그래밍) (212)
개발일지
Navigation Navigation은 UI의 전환을 쉽게 도와주고 시각화 하는 Jetpack Architecture입니다. 기존의 Activity 중심의 UI 구성이 아닌 Fragment와 FragmentTransaction을 통해 UI를 구성하여 더 성능이 좋습니다. 구성 NavGraph : 탐색에 관련된 정보가 모여있는 XML 리소스입니다. UI 대상과, UI 탐색에 관한 정보가 저장됩니다. NavHost : 탐색 그래프에서 UI 대상을 표시하는 빈 컨테이너입니다. NavHostFragment로 표현합니다. NavController : NavHost에서 탐색을 관리하는 객체입니다. 장점 프래그먼트 트랜잭션 처리 기본적으로 '위로'와 '뒤로'작업을 올바르게 처리 (위로 버튼은 앱을 종료하지 않는다...
Hilt Entry Point Entry Point는 Hilt가 Inject하는 진입점이다. Activity, Fragment 같이 Android Framework에 의해 제공되는 Component들은 @AndroidEntryPoint를 통해 진입점을 지정할 수 있고, 일반 객체들도 @Inject constructor를 정의하여 진입점을 만들어 Inject할 수 있다. 하지만 Hilt가 지원하지 않는 Class에 Inject할 경우가 존재하고 이를 해결하기 위해 EntryPoint를 설정해야한다. class DeleteToDoSnackbar( private val view: View, private val todo: ToDo ) { private val entryPoint by lazy { EntryPo..
DataStore Jetpack DataStore는 SharedPreferences를 대체하기 위해 나왔다. DataStore는 Key-Value뿐만 아니라, Protocol Buffers를 이용하여 Object를 저장할 수 있고, 동기/비동기를 지원하며 IO에 대한 Exception도 제공하기 때문에 유연하게 코드를 작성할 수 있다. * Android Developer에서 복잡한 구조의 데이터는 Room을 사용해서 저장하는 것을 권장한다. SharedPreferences 단점 Key-Value 형태로 XML파일에 값을 저장하고 String 또는 Primitives 값만 저장할 수 있다. => 이를 해결하고자 JSON이나 XML형식의 String으로 저장하지만 Type Safety를 보장하지 않기 때문에..
ViewModelScope ViewModel마다 존재하는 Scope이다. ViewModel이 삭제되면 자동으로 취소된다. class ExampleViewModel : ViewModel() { init { viewModelScope.launch { /* ViewModel이 사라지면 종료된다. */ } } } LifeCycleScope LifeCycle 객체마다 존재하는 Scope이다. Create, Start, Resume 3가지의 Mode를 지원하고 Active상태(화면에 보이는 상태)일 때만 수행된다. class CoroutineFragment : BaseFragment(R.layout.fragment_coroutine) { private var count = 0 private val logList b..
Dialog Activity나 Fragment과 다른 작은 화면의 창입니다. 특정 작업전에 입력을 받거나 알람용도로 쓰입니다. DatePickerDialog 달력에서 날짜를 선택하여 Listener를 통해 값을 받을 수 있다. private fun initOnDatePicker() { binding.setOnDatePicker { val calendar = GregorianCalendar() DatePickerDialog(requireContext(), { dialog, year, month, dayOfMonth -> binding.result = """ Dialog : ${dialog.id} Event : ${SimpleDateFormat.getDateInstance().format(GregorianC..
ViewModel with SavedStateHandle ViewModel은 UI Data를 안전하게 보관하는 방법의 하나입니다. onSavedInstaceState()를 사용하지 않고 데이터를 쉽게 저장/복원 할 수 있고 메모리에 저장하기 때문에 SavedStateHandle에 비해 빠릅니다. 하지만 메모리에 저장하기 때문에 Android Framework에서 메모리를 회수하면 저장된 값을 잃습니다. 하지만 SavedStateHandle은 디스크에 직렬화하여 저장하기 때문에 값을 유지할 수 있습니다. => ViewModel에서는 이러한 문제점을 해결하기 위해 SavedStateHandle을 쉽게 조작할 수 있도록 도와줍니다. ViewModel SavedInstanceState Persistent Sto..
Hilt Component 삽입을 실행할 때 @InstallIn 주석을 사용하여 참조할 수 있는 구성요소를 설정하고 구성요소에 맞는 대상에서만 삽입할 수 있다. Hilt Component 인젝터 대상 ApplicationComponent Application ActivityRetainedComponent ViewModel ActivityComponent Activity FragmentComponent Fragment ViewComponent View ViewWithFragmentComponent @WithFragmentBindings 주석이 지정된 View ServiceComponent Service Hilt Component Lifetimes Hilt는 Hilt Component별 Android Cla..
Hilt Module 생성자를 사용할 수 없는 Class를 주입해야 하는 경우 @Inject 생성자를 정의할 수 없습니다. (Interface, Builder를 통해 생성되는 Class, 외부 라이브러리 클래스 등) => Hilt Module을 통해 Class를 어떻게 얻는지 정의하여 의존성을 주입할 수 있습니다. @Module, @Installin @Module로 지정된 Class는 Hilt에게 인스턴스를 제공하는 방법을 알려줍니다. @Module로 지정된 Class는 @Installin을 지정하여 각 모듈이 어떤 Scope에서 사용되는지 알려야 합니다. @Provides 외부 라이브러리에서 제공되거나 Builder 패턴으로 제공되는 경우 @Provides를 통해 인스턴스를 제공하는 방법을 알려줄 수 ..