이번 프로젝트에서 Github Action이라는것을 알게되고, CI를 적용해보았다. CI CI(Continous Integration) 지속적인 통합 CI를 제대로 구축하면 코드의 새로운 변경사항을 레포지토리에 적용할때마다 테스트,ktlint등 검사를 할 수 있다. 우리팀과 같은 경우 코틀린 컨벤션을 지키는 Ktlint를 CI로 구축해서 특정 브랜치에 push나 PR을 날릴 경우 Github action으로 등록한 workflow에 따라 자동으러 검사를 한다. 우리는 Git flow 전략에 따라서 develop 브랜치에 PR을 날릴때마다 작성한 코드의 코틀린 컨벤션을 검사한다. 위 사진과 같이 error를 감지할 경우 어디서 컨벤션을 지키지 않았는지 알 수 있다. 팀 그라운드룰로 Kotlin Conven..
Skils/Android
이번글은 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_..
개요 기존의 사용하던 viewBinding에서 최근에는 DataBinding을 사용하는 방향성으로 바뀌고 있습니다. 저도 코드를 viewBinding을 사용해서 작성했는데, 최근에 DataBinding을 사용했고, 느낀 점과 공부한 점을 적을 예정입니다. DataBinding dataBinding의 사전적 정의는 이러합니다.(공식문서) 데이터 결합 라이브러리는 프로그래매틱 방식이 아니라 선언적 형식으로 레이아웃의 UI 구성요소를 앱의 데이터 소스와 결합할 수 있는 지원 라이브러리입니다. 즉 setText와 같이 코드적으로 UI 구성요소에 연결하는것이 아닌 어떠한 선언적 형식으로 UI 구성요소에 데이터를 연결한다고 해석할 수 있습니다. Databinding은 viewModel과 LiveData와 함께 사용..
기존의 Fragment간의 이동을 구현할 때 supportFragmentManager.beginTransaction(). replace(R.id.frame_layout,GameFragment()).commit() 위와 같은 코드를 통해서 프래그먼트 간의 이동을 구현했습니다. 하지만 Android에서 Navigation이라는 컴포넌트를 통해서 간단하게 프래그먼트 끼리의 이동을 구현할 수 있습니다. 해당 내용은 공식문서를 통해서 공부했고, 그에 대한 제 생각을 적어봤습니다. Navigation 공식문서에 따르면 Navigation의 정의는 아래와 같습니다. Navigation은 Android 애플리케이션 내에서 '대상' 사이를 탐색하는 프레임워크로, 대상이 Fragment, Activity에 관계없이 일관된..
안드로이드 개발을 시작하고 꽤 많은 코드에서 Context를 명시하라는 조건이 있었다. Context가 사전적 의미로 대충 문맥, 맥락 이런 뜻이기에 그냥 현재 Activity를 의미하는 줄 알았다. 하지만 자세히 파보니 Context가 단순 현재 Activity만을 의미하는 것이 아닌 것을 알게 되었고, 계속 공부를 할수록 Context를 명시해야 하는 코드가 많아지기에(ViewModel Observable 등등..), 개념을 정확히 이해할 필요성이 있어서 정리하려고 합니다.! 💡안드로이드에서의 Context Context란 단어 그대로 맥락을 의미하며, 현재의 상태를 나타낸다고 이해하면 편할 거 같습니다 Context에 대한 중요한 몇 가지 사실 들 애플리케이션의 현재 상태를 Context를 통해 표..
Live Data는 MVVM패턴의 구성요소인 ViewModel에서 많이 사용되는 데이터 형식입니다. Live Data는 Android Jetpack에 포함되어 있는 라이브러리입니다. 공식문서에는 설명이 어렵게 되어 있어서 제 주관적으로 해석한 글입니다. (제 주관이 싫다면 뒤로 가기를 살포시 눌러주셍) 우선 Live Data는 observable data holer class입니다. 쉽게 설명하면 망보는 사람입니다. 이걸 안드로이드에서 적용해 보면 데이터가 변경되는지 감시하고 있다가 UI 컨트롤러(Activity, Fragment)들에게 알려줍니다. 그러면 UI 컨트롤러는 변경사항을 가지고 UI를 업데이트합니다. 감시자가 나는 원하지도 않는데, 계속 뭐뭐뭐 바뀌었다~ 이렇게 하면 듣는 사람들도 피곤하지 ..
이번 글에서는 MVVM 패턴에서 빠질 수 없는 요소인 ViewModel에 대해서 공부해 본 걸 정리할까(?) 합니다. 자세한 내용과 코드는 공식문서에 있으므로, 공식문서를 참고하시면 될 것 같습니다.. (제가 편한대로 정리하기 때문) ViewModel이란? 액티비티와 프래그먼트와 같은 UI 컨트롤러의 로직에서 데이터를 다루는 로직을 분리하기 위해 등장한 Android JetPack 라이브러리이다. 두 가지를 분리해야 하는 이유 UI 컨트롤러(Activity, Fragment)의 목적 데이터를 표시해 주거나, 사용자가 어떤 작업을 했을 때 반응을 보여주거나 , 권한 요청과 같은 OS커뮤니케이션을 처리하는 것이 UI 컨트롤러의 목적이다. 따라서 UI 컨트롤러에서 데이터를 다루는 로직을 책임지게 되면 많은 유..
이전 글에서는 mvc에 대해서 포스팅했습니다. https://jja2han.tistory.com/256 [[Android] - 안드로이드 설계 패턴 (MVC) 📕배운 내용 안드로이드 애플리케이션 설계 패턴은 크게 3가지로 분류됩니다. ( MVC, MVP , MVVM) 이번 포스팅에서는 MVC에 대해서 알아볼 예정입니다. 애플리케이션 설계 패턴이 중요한 이유는 이전 jja2han.tistory.com](https://jja2han.tistory.com/256) 이번 글에서는 MVC의 문제점을 해결하기 위해 나온 설계패턴인 MVP에 대해서 적어볼까 합니다. MVC에서의 문제점!? 그것은 바로 View와 Model의 결합도가 높아서 유닛테스트가 불가능하다는 단점이 있습니다. 그 문제점을 해결하기 위해서 MVP..