서론 Android에서 자주 사용되는 Jetpack Navigation에 대해 정리해보려 한다. 기존 화면 전환 시 intent, transaction을 사용하지만, 앱 구성이 복잡해질수록 코드도 복잡해질 수 있다. 화면 구성 및 UI 전환을 쉽게 구현할 수 있도록 도와주고, SAA 아키텍처에서 함께 사용되는 개념이라 기본적인 내용이지만 중요하다고 생각한다. Navigation이란? 먼저, Jetpack이란 Android 개발을 쉽고 빠르게 도와주는 라이브러리이다. Navigation은 UI(xml)을 통해 navigation 편집이 가능하게 해주는 라이브러리로 주로 BottomNavigation과 자주 사용된다. Fragment의 전환을 좀 더 간단하게 도와주는 도구로 생각하는 게 이해하기 가장 쉬울 ..
서론 요즘 Android Architecture에 대한 내용을 공부하던 중 SAA라는 새로운 아키텍처를 보게 되었다. Google I/O 2018 에서 언급된 내용으로 한참 지난 지금에서야 알게 된 점에 오늘도 반성중이다 ㅠ 사실 이전부터 Google에서는 Activity보다 Fragment 사용을 적극 권장했기 때문에 Single Activity 아키텍처의 사용을 권장하는 것은 당연하다고 느낀다. SAA에 대한 개념을 가볍게 정리해보려 한다. SAA란? SAA(Single Activity Architecure)는 하나 혹은 최소한의 Activity만을 사용하고 나머지 화면은 모두 Fragment로 구성한 구조로, 주로 JetPack Navigation과 함께 사용되는 아키텍처이다. Single Acti..
서론 요즘은 단순 기능 개발에 목표를 두는 게 아닌 가독성 좋고 효율적인 코드를 작성하기 위해 노력 중이다. 위 목표를 달성하기 위해 최근 클린 아키텍처에 대한 개념을 학습 중에 있다. 아직 이해도가 많이 부족하다고 느끼지만 한번 정리해보려 한다. Clean Architecture란? 클린 아키텍처(Clean Architecture)란 소프트웨어 개발에 사용되는 디자인 패턴 중 하나로, Robert C. Martin이 제안한 아키텍처 원칙이다. 위 아키텍처는 소프트웨어를 모듈화 하고 느슨하게 결합된 컴포넌트로 구성하여 유지보수성과 테스트 용이성을 높이는 것을 목표로 한다. 클린 아키텍처의 의존성은 외부에서 내부로 향하고, 외부 요소는 내부 요소에 영향을 미치지 않는다. 즉, 안쪽으로 갈수록 고수준(추상화..
서론 Android Flow 학습 중에 등장했던 Cold Stream, Hot Stream의 개념에 대한 정리가 필요해 보여 간단하게 정리해보려 한다. Cold Stream과 Hot Stream의 차이 보통 flow를 Cold Stream, StateFlow/SharedFlow를 Hot Stream으로 분류한다. 데이터가 생성되는 위치 생산자가 발행한 데이터를 동시에 여러 소비자들이 수신할 수 있는지 여부 스트림이 데이터를 생산하는 시점 Cold Stream 데이터가 내부에서 생성됨 데이터는 소비자가 소비를 시작할 때 생산됨 하나의 생산자에는 하나의 소비자가 존재함 터미널 연산자(collect, collectLatest, single, reduce, toList 등..)가 호출되기 전까지는 활성화되지 않..
서론 Android viewmodel을 활용하여 개발을 하던 중 LiveData를 잘 사용하고 있었다. 다른 개발자들의 코드를 보니 LiveData뿐만 아니라 Flow를 활용하는 경우도 많았다. 아직 Flow가 익숙하지 않아서 한번 간단하게 정리해보려 한다. Flow란? Coroutine의 Flow는 데이터 스트림이며, 코루틴 상에서 리액티브 프로그래밍을 지원하기 위한 구성요소이다. 더보기 - 리액티브 프로그래밍이란 데이터가 변경될 때 이벤트를 발생시켜서 데이터를 계속해서 전달하도록 하는 프로그래밍 방식을 뜻함 https://ystech.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8C%A8%EB%9F%AC%EB%8B%A4%EC..
서론 지난 포스팅으로 gitignore로 불필요한 커밋을 방지하는 방법을 작성했다. 이제 Git 사용 준비가 끝났으니 실제 사용할 때는 어떤 식으로 사용하는 게 좋을지에 대해 작성해보려 한다. 개발자들 사이에서 한 번쯤은 들어봤을 법한 Git-Flow에 관해 정리해보려 한다. Git-Flow? 단어 그대로 git의 흐름이라는 의미이다. git 관리 전략이라고 생각하면 좋을 것 같다. Git-Flow가 필요한 이유는 협업하는 다른 개발자와의 코드 충돌 방지(conflict)를 위함이다. Git-Flow는 branch를 어떻게 나누는지가 가장 중요하다고 생각한다. branch의 종류 branch를 정리하면 아래와 같다. main(master) : 서비스 배포가 완료된 에러가 없는 branch develop(..
서론 최근 불필요한 항목들이 커밋되지 않도록 하기 위해 .gitignore을 적용했다. 하지만, 기존 프로젝트 중 .gitignore가 정상적으로 적용되지 않는 것들이 있어 해결방법에 대해 정리해보려 한다. 원인 .gitignore 파일이 적용되지 않는 원인은 git의 캐시 때문이라고 한다. 따라서 위 문제를 해결하기 위해 git에 있는 캐시 파일을 지우고 다시 add 해야 한다. 해결 아래 내용을 순서대로 진행해줘야 한다. git rm -r --cached . git add . git commit -m "removed cached" 1,2번째 뒤에 꼭 . 을 붙여야 하고, 3번째 " " 안에는 원하는 커밋 메시지를 작성하면 된다. git rm -r --cached . git add . git commi..
서론 기존 프로젝트를 진행하면서, 작업 내용을 git에 commit 할 때 작업한 내용 외에 불필요한 .gradle, .idle 등의 파일들이 노출되는 것을 본 적이 있을 것이다. 이를 제어할 수 있는 gitignore에 관해 정리해보려 한다🤗 gitignore란? 내가 gitignore을 쓴 목적은 커밋할 때 수정한 내용 외에 다른 내용이 노출되는걸 원치 않아서였다. 원래 gitignore는 민감한 정보가 들어있는 파일이나 형상관리할 필요가 없는 파일들을 git에서 더 이상 추적하지 않도록 gitignore 파일에 정의하여 제외하는 용도로 쓰인다고 한다. 제외할 파일의 예시 보안적으로 위험성이 있는 파일을 제외 해야하는 경우 (키, 스토어 등) 프로젝트와 관계없는 파일을 제외해야하는 경우 용량이 큰 파..
서론 사용자에게 정보를 표시하는 list 방식에서 사용자가 해당 list를 스크롤할 때 더 보기 혹은 로딩 view가 노출되면서 데이터가 추가로 보이는 경우를 본 경험이 있을 것이다. 이런 식으로 정보를 가져오는 방식을 Paging이라 한다. 기존에는 코드를 통해 작성했지만, jetpack에서 제공하는 Paging3를 활용하면 효율적인 Paging 구현이 가능하다. Paging3를 사용하기 위해 해당 내용을 정리해보려 한다😊 Paging 라이브러리 사용 이점 구글 공식문서에서 설명하는 Paging 라이브러리 사용 이점은 아래와 같다. Paging 데이터로 작업하는 동안 시스템 리소스를 효율적으로 사용할 수 있다. 요청 중복 삭제 기능이 기본 제공되기 때문에, 앱에서 네트워크 대역폭과 시스템 리소스를 효율..
서론 프로그래밍에서 한 번쯤은 접해봤을 DTO, DAO, Entity에 대한 개념을 정리해보려 한다. 클린 아키텍처 적용 시 헷갈리면 안 되는 개념이기 때문에 중요하다고 생각하는 개념이다. DTO(Data Transfer Object) DTO는 단어 그대로 데이터 전송 객체를 의미한다. API 호출 시 response 받는 데이터이다. 계층 간의 데이터 교환을 하기 위해 사용하는 객체 API 호출 시 서버로부터 받은 JSON 형태의 데이터를 매핑할 수 있는 data class 클린 아키텍처의 data 모듈에 model 클래스에 해당 화면에 노출시키지 않는 data가 포함된다면 domain 모듈의 model에 필요한 data만 mapping 하는 작업이 필요함 smaple api : https://json..