개발 일지 43

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위와 같이 위임 프로퍼티에 대해 공부해놓고 정작 프..

앞으로의 App 개발 일지 작성

#1 배보다 배꼽이 더 큰 상황지금껏 개발 일지를 상세하게 적었던 이유는, '왕초보 프로그래머가 따라할 수 있게'하기 위함이었다. 그러나, 배보다 배꼽이 커져버렸다. 왜냐하면 블로그 기록을 어떻게 더 '친절'하게 남길까를 고민하는 시간이, 전체 공부에서 상당한 부분을 차지해버렸기 때문이다. 게다가 "개발 일지를 상세하게 적었다"는 건 내 사견에 불과하다. 진짜 왕초보라면, 분명 내가 생각지도 못한 부분에서 막힐테니 말이다. 물론 그런 경우의 수까지 고려하는 게 좋겠지만, 그건 블로그가 아니라 전문 작가가 쓴 프로그래밍 교재에서 행해져야 하는 것이다. 즉, 의미있는 기록이 아니었다는 말이다. 실제로 블로그 통계를 봐도 App 개발 일지를 본 사람은 몇 손가락에 꼽는다. 의미가 없더라도 써서 나쁠 건 없다...

Nutri Capture 프론트엔드 - 아이콘 제작 (1차)

#1 개요#1-1 일정 Nutri Capture 방향성 - 개발 일정표 (1차)#1 현 개발 행태에 대한 문제점#1-1 과정의 완벽주의난 풋내기 프로그래머에 불과하다. 내가 만들 앱 또한 그저 그런 앱일 것이다. 적어도 처음 (출시할 의도로 만드는) 앱을 당연히 그럴 것이다,kenel.tistory.com이전 게시글에서 'ChatBar를 통해 전송한 MealItem의 name 속성을 LazyColumn에서 확인'할 수 있었다. 이제 다음 작업은 계획표 상, 'nutritionInfo 각 프로퍼티에 1대1로 대응되는 아이콘을 가져오거나 제작함'이다. #1-2 아이콘아이콘을 어디에서 일괄적으로 다운로드하는 걸 생각했지만, 아이콘 간 통일성이 떨어진다는 문제점이 있다. 그래서 직접 그리기로 했다. 물론, 너무..

Nutri Capture 백엔드 - StateFlow로 전환

#1 개요#1-1 State에서 StateFlow로 마이그레이션 [Kotlin] Coroutines Flow - StateFlow#1 개요 StateFlowA SharedFlow that represents a read-only state with a single updatable data value that emits updates to the value to its collectors. A state flow is a hot flow because its active instance exists independently of the presence of collectokenel.tistory.com위 게시글을 참조하여 프로젝트를 업데이트했다. #1-2 StateFlow 업데이트이전 게시글의 문제점을 ..

Nutri Capture 백엔드 - ChatBar에 ViewModel 연결

#1 개요#1-1 ViewModel 전달하기ChatBar의 '전송' 버튼을 눌러, NutrientViewModel.onEvent()를 발생시킬 것이다. 현재 MainActivity에서 NutrientViewModel 객체를 만들어서 NutrientScreen에 전달하고 있는데, 같은 방식으로 ChatBar에도 전달한다. 그리고 이 NutrientViewModel에 정의해둔 Insert 동작이, ChatBar의 '전송' 버튼을 누를 때 트리거되게 만든다. 지금은 기존 코드를 복사해서 새로운 기능에 붙여넣기하고 있지만, 후에 Hilt로 마이그레이션해서 이러한 의존성 관련 코드들을 깔끔하게 정리할 예정이다. #1-2 문제점: UI 업데이트하지만 #1-1를 프로젝트에 적용해도, #3-1에서 보듯 UI가 업데이트..

Nutri Capture 방향성 - 개발 일정표 (1차)

#1 현 개발 행태에 대한 문제점#1-1 과정의 완벽주의난 풋내기 프로그래머에 불과하다. 내가 만들 앱 또한 그저 그런 앱일 것이다. 적어도 처음 (출시할 의도로 만드는) 앱을 당연히 그럴 것이다, 아니 그래야만 한다. 그런데 나는 마치 정상급 앱 경영 콘테스트에 출품하는 것처럼 프로젝트를 만들어 가고 있다. 비유하자면 아주 사소한 돌부리만 발에 걸려도, 그걸 포크레인까지 동원해 철저하게 파고 평탄화 작업을 한 뒤에 안전 검사까지 하고 나아가는 셈이다. 최소한의 기능만 만들고 우선 출시부터 한다. 그리고 고쳐나가면 된다. 오히려 그 편이 더 '완벽'하지 않은가? 현재의 나는 결과의 완벽주의가 아니라 과정의 완벽주의를 좇고 있다. 어차피 사람들은 최종 결과만 보는 데 말이다. 나라고 다른가? 나 또한 다른..