2025/01 7

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 개발 일지를 본 사람은 몇 손가락에 꼽는다. 의미가 없더라도 써서 나쁠 건 없다...

일론 머스크의 사고법과 충고

#1 1원칙 사고법#1-1 정의짐 켈러: 일론 머스크는 "그게 정말(really) 제일 중요한 거야?"라고 끊임없이 질문하며, 그 질문의 과정에서 모든 가정, 확신, 편견을 버렸습니다 (오픈 마인드). 우리가 가진 생각의 99%는 편견을 지키려는 변명에 불과합니다. 그 중 98%는 아예 틀렸을 거고요. 생각의 범위를 넓혀야 새로운 걸 할 수 있습니다.1원칙 사고법(First principles thinking)은 먼저 모든 현상을 쪼개서, 그 속의 내재된 본질을 찾는 사고법이다. 그리곤 "진짜(really)?"를 끝까지 물어서 정말로 맞는 사실이나 논리를 하나하나 밝혀낸다. 그 하나하나를 기반(본질) 위에 차곡차곡 쌓아 올린다. 일론은 물리학의 기본 원칙을, 어떤 현상에 내재된 본질로서 두고 생각하는 ..

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가 업데이트..