본문 바로가기

개발일기

(14)
8월 한달 토이 프로젝트를 해보자! -04 : List UI 다음은 리스트 ui 구성이다. 내가 생각한 구성은 GridLayout을 활용, 한 줄에 CardView를 2개씩 배치하고, 각각의 CardView 안에는 사진, 제목, 최종 업데이트 날짜, 좋아요 수, 댓글 수를 배치할 것이다. list_fragment.xml에는 우선 RecyclerView만 배치하고, CardView 내부의 레이아웃을 짜야 한다고 생각, Adapter를 만들기로 하였다. 써놓고 보니 Glide와 Paging 라이브러리를 써야겠다, 는 생각이 든다. 아무튼 그건 다음에 기능/성능 파트에서 고민하기로 하고. 우선 list_fragment 및 ListFragment에서 tmpCardView를 없애준다. Adapter로 대체할 부분이니까. 그 다음 RecyclerView를 배치해줄 건데, 이..
8월 한달 토이 프로젝트를 해보자! -03 : LogIn UI 나는 가이드라인을 매우 좋아한다. 가이드라인에 UI 컴포넌트들을 붙이는 것이 가장 선호하는 구성 방식이다. Composable을 자유롭게 다룰 수 있게 된다면 그땐 또 모르겠지만, 현재는 그렇다. 일단 양 옆의 margin, 혹은 padding은 값을 정하기보다 가이드라인을 그어서 왼편과 오른편이 각각 붙도록 설정할 것이다. 그리고 웬만하면 계층 구조를 만들기보다 한 ConstraintLayout 안에 비율을 줘서 때려박는 것을 좋아하기도 한다. 2년에 걸쳐 형성된 습관이랄까,,, 좋지 않음을 이유와 함께 알려주신다면 기꺼이 고치겠습니다. 굽신 아이콘은 iconfinder.com 에서 free & commercial use 가능한 아이콘과, Material Icons를 사용할 것이다. id와 pw가 비어..
8월 한달 토이 프로젝트를 해보자! -02 : Navigation 1일차의 목표는 UI 구성이다. 이를 위하여 Fragment Navigation 설정을 우선 해줄 것이다. 디자인이 나와있지 않기 때문에(어차피 내 맘대로 해야 하지만) 화면 전환을 우선 구성하기로 한다. Empty Activity 베이스로 프로젝트를 생성 후, 종속성을 추가해준다. 종속성은 한 번에 전부 추가하기보다, 매 섹션별로 필요한 종속성을 추구하고 관련된 태스크를 다루는 식으로 포스트를 구성하려 한다. 1. 종속성 추가 build.gradle(:app) plugins { ... // safeargs 설정을 위해 id 추가. project level gradle에도 // 동일한 절차를 수행할 것이다. id 'androidx.navigation.safeargs.kotlin' } ... // 가장 최..
8월 한달 토이 프로젝트를 해보자! -01 임시 백수다. 백수면 백수지 왜 임시인가? 퇴사를 하였고 다음 입사 전까지 시간 여유가 있기 때문이다. 퇴사 후 2주차에 접어들어 몸도 뇌도 모두 아메바가 되어 흐물흐물 해지고 있기에, 일상을 지탱할 수 있을 적절한 긴장감을 찾고자 처음에는 Udemy를 보며 공부를 하고자 했다. 하지만 목적의식 없이 일단의 지식 습득을 목적으로 하는 공부는 명확하게 한계가 있어서... 너무나도 하기가 싫더라. 그냥 안 하게 된다. 하여, 프로젝트 하나를 해보기로 하였다. 시간이 부족하니 일단 베이스는 2년 간 해온 안드로이드로. 다만 여러가지 공부해본 개념을 적용하여서. 사수 없이 주먹구구식으로 대응해오며 (나름대로 최선으로 공부하고 적용해왔다고는 생각한다. 하지만 아무래도 체계적으로 학습하지 못했다라는 아쉬움은 사라지..
Retrofit - MVVM - Coroutine ㄲㄲㄲ 그렇다. async에 아주 많이 애를 먹었다. 어째서 두 개의 fun을 리스트로 묶어 awaitAll()을 실행했는데 자꾸 하나를 기다리지 않고 다음 fun을 진행해버리는가?! 일단 이 문제는 잠시 뒤로 미루고 프로세스가 진행될 수 있게, 두 fun을 각기 다른 fun 안에서 async 처리해주었다. 속성으로 공부해서 실무에 적용하려니 정말 힘들다 힘들어, 나는 설명을 해줘야 하고 나에게 설명해줄 사람은 없고! 1년차에 이래도 되는 겁니까 이거!!! 일단 이전에 url 앞부분 (Shop, Field, ...)에 따라 apiCall을 나눠놓는 것은 굉장히 비효율적이라는 결론을 내리고 하나의 인터페이스에 모두 몰아넣기로 하였다. ApiCall.kt interface ApiCall { @POST("/Login..
Retrofit! Eureka! Fragment랑 같이 쓰려다가 MainFragment 예시 때문에 글이 너무 길어져서. 우선 response가 제대로 돌아오지 않던 이유를 찾았다. Retrofit이 Gson을 디폴트로 사용하기 때문에, 내가 Body로 전송하는 인스턴스가 Json으로 자동으로 serialized 되었기 때문. 즉, 이미 serialized 된 JSONObject를 한 번 더 toJson() 시켜주는 삽질을 하고 있던 거다. 하여, 다시 만든 인터페이스. LogInApi.kt interface LogInApi { @POST("/Login") fun startLogin(@Body jsonObj: Operator) : Call companion object { fun create() : ApiInterface { val r..