개발 일지 49

Pagination 인터페이스ㆍ구현ㆍ검증용 앱

#1 Pagination 클래스Pagination 클래스는 전체 게시글 갯수, 한 페이지에 표시할 게시글 갯수, 한 페이지 블럭에 표시할 페이지들의 갯수에 기반해 게시판의 네비게이션 역할을 하는 클래스다. 예전에 웹 프로그래밍에서 게시판을 만들 때 처음 만들었다. 그 이후로도 2 ~ 3번 정도 다시 Pagination 클래스를 재작성했던 기억이 있다. 얼마나 비효율적인가! 그래서 이참에 완벽하게 구현하고 기록해두려 한다. 앞으로 Pagination 클래스는 본 게시글의 코드를 재사용할 것이다. #2 기본 코드#2-1 인터페이스// by interfacer_han (https://kenel.tistory.com/327)/*(example) goToFirstPageBlockButton: (example) g..

Nutri Capture 프론트엔드 - NutrientBottomSheet 부분 구현

#1 개요 Nutri Capture 프론트엔드 - '피자' 아이콘 임시 적용#1 커스텀 아이콘 임시 적용#1-1 커스텀 아이콘 Nutri Capture 프론트엔드 - '피자' 아이콘 구현#1 개요#1-1 지금까지의 여정 Nutri Capture 프론트엔드 - 커스텀 BottomSheetScaffold 개발 유예#1 개요#1-1 개발 이kenel.tistory.com위 게시글에서 못다한 부분을 구현했다.  #2 코드 스니펫#2-1 NutritionBottomSheet.kt...@Composablefun NutrientBottomSheet( viewModel: NutrientViewModel = hiltViewModel()) { val inputtedDayMeal = viewModel.nutrie..

Nutri Capture 백엔드 - NutritionInfo 리팩토링

#1 문제점#1-1 리팩토링할 기존 코드package com.example.nutri_capture_new.dbimport androidx.room.ColumnInfodata class NutritionInfo( // 과식 정도값 @ColumnInfo(name = "overeating_excess") var overeatingExcess: Int = 0, // 정제당 섭취 정도값 @ColumnInfo(name = "refined_sugar_excess") var refinedSugarExcess: Int = 0, // 정제 곡물 섭취 정도값 @ColumnInfo(name = "refined_grain_excess") var refinedGrainExcess..

Nutri Capture 프론트엔드 - '피자' 아이콘 임시 적용

#1 커스텀 아이콘 임시 적용#1-1 커스텀 아이콘 Nutri Capture 프론트엔드 - '피자' 아이콘 구현#1 개요#1-1 지금까지의 여정 Nutri Capture 프론트엔드 - 커스텀 BottomSheetScaffold 개발 유예#1 개요#1-1 개발 이유말로 설명하기 힘들지만, BottomSheetScaffold의 내부 코드를 살짝만 바꾸면 내가 원하는 동kenel.tistory.com이전에 만든 아이콘이다. 만들었으니, 우선 본 프로젝트에 적용부터 해봤다. #1-2 임시 적용 코드...@Composablefun NutrientBottomSheet( viewModel: NutrientViewModel = hiltViewModel()) { val inputtedDayMeal = view..

Nutri Capture 프론트엔드 - '피자' 아이콘 구현

#1 개요#1-1 지금까지의 여정 Nutri Capture 프론트엔드 - 커스텀 BottomSheetScaffold 개발 유예#1 개요#1-1 개발 이유말로 설명하기 힘들지만, BottomSheetScaffold의 내부 코드를 살짝만 바꾸면 내가 원하는 동작을 구현할 수 있었다. 그렇다고 internal이나 private 접근 지정자가 붙은 내부 코드를 내kenel.tistory.com위 게시글에서 보듯, 원래는 영양 정보 입력을 위한 커스텀 키보드를 만들기로 했었다. 이 커스텀 키보드는 BottomSheetScaffold의 BottomSheet에 들어갈 예정이었다. 순정 BottomSheetScaffold로는 내가 원하는 동작을 구현할 수 없다. 그래서 커스텀 BottomSheetScaffold를 만들..

Nutri Capture 프론트엔드 - 커스텀 BottomSheetScaffold 개발 유예

#1 개요#1-1 개발 이유말로 설명하기 힘들지만, BottomSheetScaffold의 내부 코드를 살짝만 바꾸면 내가 원하는 동작을 구현할 수 있었다. 그렇다고 internal이나 private 접근 지정자가 붙은 내부 코드를 내가 커스텀할 수도 없는 노릇이었다. public한 함수들로 구현도 할 수 있는 모든 걸 해봤다. 결국 깊숙히 파고들어본 결과, 반드시 내부 코드를 바꿔야만 내가 원하는 동작을 구현할 수 있다는 걸 깨달았다. 정확히는, NestedScrollConnection의 기제를 알게되고나서 깨달았다. 순정 BottomSheetScaffold에 가해지는 사용자의 터치 입력(Pointer input)은 최상위 부모(인 내부 코드)까지 올라가는데, 이를 막을 방법이 없다는 걸 알게된 것이다...

Nutri Capture 백엔드 - Hilt 도입

#1 개요#1-1 Hilt 도입계획표 상, Hilt 도입은 끝자락 단계였다. 하지만, 코드를 짜가며 앱을 구현해나가는 데에 여러 상용구 코드들이 나를 거슬리게 했다. Hilt로 현존하는 상용구 코드 그리고 잠재적으로 발생할 상용구 코드들을 선제적으로 제거하는 편이 더 좋을 것이란 판단을 내렸다. #1-2 기반 (레퍼런스) [Android] Dagger2 - Hilt로 마이그레이션#1 Hilt 개요 Hilt를 사용한 종속 항목 삽입  |  Android Developers이 페이지는 Cloud Translation API를 통해 번역되었습니다. Hilt를 사용한 종속 항목 삽입 컬렉션을 사용해 정리하기 내 환경설정을 기준으kenel.tistory.com위 게시글에 기반해, 본 안드로이드에 Hilt를 도입한..

[Android] Hilt - java.lang.RuntimeException: Unable to instantiate application

#1 문제 상황#1-1 Hilt 도입 [Android] Dagger2 - Hilt로 마이그레이션#1 Hilt 개요 Hilt를 사용한 종속 항목 삽입  |  Android Developers이 페이지는 Cloud Translation API를 통해 번역되었습니다. Hilt를 사용한 종속 항목 삽입 컬렉션을 사용해 정리하기 내 환경설정을 기준으kenel.tistory.com위 게시글에 기반해, 개발 중인 앱에 Hilt를 도입하고 있었다. #1-2 Application 클래스package com.example.nutri_capture_new.diimport android.app.Applicationimport dagger.hilt.android.HiltAndroidApp@HiltAndroidAppclass H..

Nutri Capture 프론트엔드 - windowInsetsPadding()

#1 문제 상황Scaffold의 bottomBar 속에 Row(). 그 Row() 속에 TextField()가 있는 구조다. TextField()를 클릭하면 소프트키보드가 Row() 직전까지 올라오는 걸 의도했으나, 실제로는 Row()의 영역을 침범하여 TextField() 직전까지 올라온다. #2 코드 스니펫Scaffold( modifier = Modifier .fillMaxSize() .windowInsetsPadding(WindowInsets.ime), // Modifier에  windowInsetsPadding()을 추가하면, 시스템 UI (여기서는 ime(가상키보드)) 영역에 가려지지 않게 된다. 주의할 점은, windowInsetsPadding()을 반드시 Sca..

Nutri Capture - 코드 정리

#1 개요코드 최적화를 하기 앞서 당장 필요없는, 계륵과도 같은 코드 전부 제거했다. 일론 머스크의 사고법에 의하면, "이건 결국 다시 넣어야 할 것 같은데?"라는 생각이 들지 않으면 충분히 제거하지 않은 것이므로 정말 철저하게 제거했다. #2 코드 스니펫#2-1 위임 프로퍼티 [Kotlin] 위임 프로퍼티 (Delegated properties)#1 Delegated properties#1-1 개요 Delegated properties | Kotlin kotlinlang.org위임 프로퍼티는, getter와 setter 로직을 다른 클래스에 위임(delegate)하는 코틀린 프로퍼티를 의미한다. 본 게시글에서는 위임 프로퍼kenel.tistory.com위와 같이 위임 프로퍼티에 대해 공부해놓고 정작 프..