Android 프로젝트를 한다면 가장 많이 사용하는 view가 RecyclerView가 아닐까.. 싶을 정도로 굉장히 많이 사용되는거 같습니다 이번 프로젝트를 하면서 어떻게 하면 아이템을 효과적으로 관리할 수 있을까에 대해서 고민해봤고, ListAdapter에 대해서 공부해 봤습니다. 제 목표는 위 사이드바에서 선택한 아이템에 대해서 UI적으로 변화를 주고 싶었습니다.ㅎㅎ ListAdapter RecyclerView에서 사용하는 Adapter는 RecyclerView.adapter 와 조금 더 확장된 개념인 ListAdapter가 있습니다. 간략하게 RecyclerView.adapter를 그냥 Adapter라고 부르겠습니다. Adapter와 ListAdapter의 차이점 아이템이 변화할 때 수동으로 변화..
리사이클러뷰를 이용해서 아이템마다 체크박스를 달아주고 아이템에 대한 체크박스 이벤트를 처리해야 했다. 아이템을 체크하고 스크롤을 내리다가 올라가면 원래 위치에 해당하는 체크박스에 대한 이벤트 처리가 사라진 것을 확인할 수 있었다. 왜??? 일정 스크롤 이상으로 움직이면 리사이클러뷰가 아이템을 재생성하기 때문이었다. 즉 viewHolder가 재활용돼서 생긴 문제라고 판단했다. 이미 Bind를 통해서 아이템을 생성했지만 스크롤을 위아래로 이동하면 아이템을 다시 배치하는 것을 확인할 수 있었다. 실제로는 아이템에 대해서 체크박스가 체크가 되어있지만 아이템을 다시 할당하면서 체크박스가 해제된 모습으로 보인 것이다. 해결 방안 해결하기 위해서 다양한 방법이 있지만, 데이터 클래스의 체크박스 상태를 저장할 변수를 ..
이번 프로젝트를 진행하면서 CustomView를 굉장히 많이 다뤘었고, CustomView에서 텍스트 관련 작업을 맡았는데, CustomView에서 DrawText에 대한 자료도 옛날 자료가 많고, 맨땅에 헤딩하듯이 개발하면서 겪은 경험입니다.. 우리 팀 프로젝트처럼 디테일하게 Text에 대해서 다루지 않을 수도 있지만,, 많은 도움 되었으면 합니다ㅎ DrawText란? Canvasd에서 제공하는 함수입니다. 여러 오버로딩된 함수가 많지만 보편적으로 사용되는 함수는 아래와 같습니다. public void drawText (String text, float x, float y, Paint paint) 함수의 내용은 그리고자 하는 text를 (x, y)를 시작점으로 해서 paint 객체를 이용해서 그리는 것..
앞선 Navigation Component의 글의 보충 내용입니다. https://jja2han.tistory.com/373 [Android] - Navigation Component 기존의 Fragment간의 이동을 구현할 때 supportFragmentManager.beginTransaction(). replace(R.id.frame_layout,GameFragment()).commit() 위와 같은 코드를 통해서 프래그먼트 간의 이동을 구현했습니다. 하지만 Android에서 Na jja2han.tistory.com Navigation Component에 대하여.. 1️⃣ Navigation을 통해서 Activity로 이동할 수 있을까? 정답은 가능하다. 나도 사용해 보기 전까지는 Activity에 ..
앞선 글은 Github Action을 이용해서 CI를 구축해보았다.이번 글은 CD를 구축했고 그에 따른 경험을 적을 예정이다.CD가 뭐야?CD는 Continous Delivery로 지속적인 배포를 뜻한다.즉 이번 글의 목적은 Github Action으로 배포를 자동화를 어떻게 했는지에 대한 글이다. 어플리케이션의 배포 경험이 없어서 정말 많이 헤멨다.Github Action에 대한 정확한 개념이 없어서 많은 글을 찾아봤고, 참고해서 성공할 수 있었다. CD를 하기전에 버전관리에 대해서 간략하게 설명하겠다.우리가 사용하는 어플리케이션은 지속적인 업데이트로 버그를 수정하고, 기능을 추가한다.이렇듯 어플리케이션의 버전관리는 아주 기본적이라고 할 수 있다. 버전관리의 전략은 다양한 전략이 있지만 통상적으로 ..
이번 프로젝트에서 Github Action이라는것을 알게되고, CI를 적용해보았다. CI CI(Continous Integration) 지속적인 통합 CI를 제대로 구축하면 코드의 새로운 변경사항을 레포지토리에 적용할때마다 테스트,ktlint등 검사를 할 수 있다. 우리팀과 같은 경우 코틀린 컨벤션을 지키는 Ktlint를 CI로 구축해서 특정 브랜치에 push나 PR을 날릴 경우 Github action으로 등록한 workflow에 따라 자동으러 검사를 한다. 우리는 Git flow 전략에 따라서 develop 브랜치에 PR을 날릴때마다 작성한 코드의 코틀린 컨벤션을 검사한다. 위 사진과 같이 error를 감지할 경우 어디서 컨벤션을 지키지 않았는지 알 수 있다. 팀 그라운드룰로 Kotlin Conven..
완전탐색, 백트래킹, DFS에서 조합과 순열을 많이 사용한다. Kotlin은 정말 잘 만든 언어이지만, 조합은 파이썬처럼 라이브러리로 구현되어 있지 않아서 우리가 한 땀 한 땀 구현을 해야 한다. 매번 문제를 풀 때 헷갈리기도 하고, 정리하면 좋을 거 같아서 포스팅하게 되었다. 순열 (Permutation) 정의는 다음과 같다. 서로 다른 n개의 원소에서 r개를 중복 없이 순서에 상관있게 선택하는 혹은 나열하는 것 중복이 없고, 순서가 있다는 것이 순열의 특징이다. 순열은 재귀함수를 통해서 구현할 수 있다. cnt는 현재 내가 뽑은 원소의 수, depth는 내가 뽑아야 할 원소의 수이다. 즉 원소의 개수가 N이고, 내가 중복 없이 순서를 지키면서 R개를 뽑으려고 할 때는 nPr이고, makePermuta..
이번글은 Jetpack Compose에 관한 글입니다. 현재 안드로이드 기술에서는 UI를 구현하기 위한 기술로 Xml과 Jetpack Compose 두 가지가 있습니다. Xml은 전통적인 방식으로 예전부터 사용했던 방식이고, Jetpack Compose는 떠오르는 신기술입니다. 그렇다면 왜 Xml이 아닌 새로운 방식의 기술이 등장했고, 도입하려고 하는 것인지, 그리고 제가 느낀 점에 대해서 적었습니다. Jetpack Compose란? Jetpack Compose는 네이티브 UI를 빌드하기 위한 Android의 최신 툴킷 공식문서에서 Compose를 채택해야 하는 이유는 다음과 같이 정의합니다. 간단한 코드 이전까지의 xml 방식에서는 Kotlin과 Xml을 번갈아가면서 작업을 했습니다. 하지만 Compo..
앱을 만들면서 한국인만이 사용한다면 String.xml을 이용하지 않고 문자열을 하드 코딩해서 사용하면 될 것이다. 하지만 만약 한국인이 아닌 다른 나라의 사람이 앱을 이용할 경우 문자열을 하드 코딩한다면 접근성이 매우 떨어질 것이다. android:text="아이디를 입력해주세요" 예를 들어서 이러한 텍스트가 텍스트뷰에 하드코딩으로 연결된다면, 한국인은 아이디를 입력하라는 것이구나~라고 이해를 하겠지만, 다른 나라의 사람은 다른 나라의 언어로 휴대폰을 설정해도 "아이디를 입력해 주세요"라는 문구를 만나게 될 것이다. 다국어 지원 이렇게 string.xml에 value값으로 문자열을 추가해 주는 것이다. android:text="안전한 아이디입니다" android:text="@string/correct_..