Android 15

안드로이드 테스트 코드를 배워보자 (1) liveData 테스트, 비동기 테스트 기본

안드로이드 앱을 개발할 때 여러 기업에서, 프로젝트에서 테스트 코드를 작성하는 것은 중요하다고 말합니다. 아예 앱을 개발할 때 Test code 를 먼저 작성하는 경우도 있죠. 실제로 카카오에서 티스토리 앱을 개발하시는 개발자 분의 기술 글에서 테스트를 해야 하는 이유를 이렇게 말하고 있습니다. (기술 글 출처) 개발 과정에서 문제를 미리 발견할 수 있다. 리팩토링을 안심하고 할 수 있다. 빠른 시간 내에 코드의 동작 방식과 결과를 확인할 수 있다. 좋은 테스트 코드를 연습하다 보면 자연스럽게 좋은 코드가 만들어진다. 의도한 대로 동작되는 것을 자신감 있게 말할 수 있다. 애자일 방법론의 도입! 로버트 C. 마틴은 이렇게 말했습니다. 기술 실천 방법 없이 애자일을 도입하려는 시도는 실패할 수밖에 없다.”..

Android/테스팅 2023.10.08

MVC, MVP, MVVM 봐도 봐도 조금씩 헷갈리면 모르는 거임

안드로이드에서 유명한 패턴인데 봐도 봐도 조금씩 헷갈리는 것 같아서 제대로 정리를 할 필요성을 느껴 정리합니다. MVC(Model - View - Controller) 패턴 MVC 패턴은 다른 소프트웨어 개발에서 많이 사용되는 디자인 패턴입니다. 당연히 안드로이드 앱 개발에서도 많이 사용됩니다. MVC 패턴은 앱을 세 가지의 주요 컴포넌트로 나누어서 관리하며, 각 컴포넌트는 다른 역할을 수행합니다. Model - MVC Model 은 데이터와 데이터 관련 로직을 포함하는 컴포넌트. 데이터는 앱의 핵심 데이터나 상태. 안드로이드 앱에서의 Model 은 데이터베이스나 네트워크 요청 결과, 앱의 상태 등을 포함할 수 있음. Model 은 주로 데이터를 가져오고 저장하며, 데이터의 유효성 검증을 하고 가공할 수..

Android/Theory 2023.10.02

안드로이드 통신에 자주 사용하는 Retrofit 알아보기 (1) - HttpURLConnection, OkHttp, Retrofit 장점을 중심으로

Jwt 토큰 관련해서 프로젝트의 버그 픽스, 간단한 리팩토링(리팩토링이라고 하기도 뭐하지만) 을 진행하면서 이 김에 Retrofit 클래스의 내부 구조에 대해서 조금 이해를 해야 할 필요가 있을 것 같아 정리해보려고 합니다. 안드로이드 레트로핏 api 호출하는 인터페이스에서 @Header 중복을 제거하기 안드로이드 레트로핏 api 호출하는 인터페이스에서 @Header 중복을 제거하기 지난 4개월 전쯤 친구를 통해서 여러 다른 분들과 플레이스토어에 바바-BABA 라는 앱을 출시했습니다. 작성했던 코드들을 천천히 보면서 리팩토링 및 버그 픽스를 하며 공부를 더 해보려고 합니 sh1mj1-log.tistory.com APi 요청 시 Access Token 을 갱신해야 할 때 Refresh Token 으로 토큰..

안드로이드 레트로핏 api 호출하는 인터페이스에서 @Header 중복을 제거하기

지난 4개월 전쯤 친구를 통해서 여러 다른 분들과 플레이스토어에 바바-BABA 라는 앱을 출시했습니다. 작성했던 코드들을 천천히 보면서 리팩토링 및 버그 픽스를 하며 공부를 더 해보려고 합니다. 일단 오늘 볼 부분은 서버와 api 통신을 하는 부분인데요. 이 프로젝트에서는 Retrofit 을 사용했고, Di 는 Hilt 를 사용하였습니다. 서버와 api 통신을 하는 전체 구조 먼저 간단한 UML 을 통해 기존에 어떻게 서버 통신을 진행하고 있는지를 간단히 표현하자면 아래와 같습니다. 클라이언트에서 AlbumApi 를 호출할 때 Retrofit 객체를 만들어 주고, 또 OkHttpClient 객체를 만들어 주는 부분은 Hilt 로 구현되어 있습니다. 화살표가 UML 의 표준으로 그린 것도 아니고 실제로 H..

안드로이드 Navigatioin Back Stack 없애기

문제 발생 배경 MVVM 아키텍처, Android Jetpack Library 을 적용한 BaBa 라는 프로젝트를 진행 중에 하나의 문제에 도달했습니다. 결론부터 말하면 Navigation 의 back stack 저장 문제였습니다. 문제 시나리오는 아래와 같습니다. 어떤 아기의 앨범 데이터를 서버로부터 불러오는 경우가 있습니다. 이 앨범 데이터들은 ‘월별’, ‘년도별’, ‘전체’ 로 나뉘어져 화면에 띄워져야 합니다. 그리고 월별, 년도별에서 앨범을 클릭하면 해당 월/ 년도의 앨범을 화면에 띄워줍니다. 이런 식으로 말이죠. 팀원들과의 회의를 통해 월별, 년도별, 전체 앨범 데이터를 계속해서 서버와 통신하여 데이터를 가져오는 것보다 한 번의 모든 앨범을 서버에서 클라이언트로 가져온 후 클라이언트에서 데이터를..

Android/UI 2023.05.17

Android ViewPager2 간단히 뜯어보기

BABA 라는 Android Application side project 을 하는 도중 아래와 같은 화면을 만들어야 했습니다. 이 때 ViewPager2 에 대한 이해가 부족한 것 같아 공부하게 되었습니다. (물론 아래 gif 는 ViewPager2 와 Custom 한 TabLayout 을 같이 사용한 것입니다. viewPager2 의 내부 동작 방식 ViewPager2 는 FragmentStateAdapter 을 extend 해서 구현해야 합니다. 그런데 FragmentStateAdapter 는 RecyclerView.Adapter 을 extend 하고 있습니다. 즉, ViewPager2 는 RecyclerView.Adapter 을 사용하여 동작합니다. RecyclerView 에서의 Item 은 Lis..

Android/UI 2023.05.05

Android Room, SQLite 기본

Room Room 지속성 라이브러리는 SQLite에 대한 추상화 계층을 제공하여 SQLite의 모든 기능을 활용하면서 보다 강력한 데이터베이스 액세스를 허용한다. 즉, 완전히 새로운 개념은 아니고 SQLite 을 활용하여 객체 매핑을 해주는 역할을 한다. https://developer.android.com/jetpack/androidx/releases/room?gclid=CjwKCAjwvNaYBhA3EiwACgndgjDo15TYN8-tpyBN9fm_rwUN_Q2ZFcmD4ccl-ITc9LllTLDPsLWQsRoCZGYQAvD_BwE&gclsrc=aw.ds#groovy What is SQLite? https://onlyfor-me-blog.tistory.com/271 [Android] SQLite 사용법..

Android/Theory 2022.09.06

비밀 다이어리 ( Handler, SharedPreference, AlertDialog)

지난 시간에 배운 Thread, Handler, Runnable 과 SharedPreference 을 실제 앱에서 사용하여 간단한 비밀 다이어리를 만들어볼 것이다. 아래는 지난 포스팅 링크: Android Thread, Handler, Runnable [Android Thread, Handler, Runnable 이번에는 Android 에서의 Thread, Handler, Runnable 에 대해서 알아봅니다. 사실 작년에 프로젝트를 할 때도 자주 사용되는 기능이고, 또 클론 코딩 등 공부를 하면서도 자주 사용했지만 이번에도 누군가 sh1mj1-log.tistory.com](https://sh1mj1-log.tistory.com/10) Android SharedPreference [Android Shar..

Android/TOYTOY 2022.09.05

Android SharedPreference

SharedPrefernce Context.gethsharedPreference(String, int) 로 리턴된 preference을 접근하고 수정하는 인터페이스. 특정 집합에 대해 모든 클라이언트가 공유하는 이 클래스의 단일 인스턴스가 있다. 즉, 이것은 싱글톤 패턴과 연관이 있다!! SharedPreference 는 데이터를 파일로 저장하는데 이 파일은 앱 폴더 내에 있다. 앱이 삭제되기 전까지 저장한 데이터가 보존된다. data/data/(패키지 이름)/shared_prefs/SharedPreference 기본 설정값이 유지되고, 수정을 하고자 하면 저장소에 commit될 때 Editor 개체를 통과해야 한다. 다양한 get 메서드로 리턴될 수 있다. 이 때 응용 프로그램에서 변경할 수 없는 것으..

Android/Theory 2022.09.05

Android Thread, Handler, Runnable

이번에는 Android 에서의 Thread, Handler, Runnable 에 대해서 알아봅니다. 사실 작년에 프로젝트를 할 때도 자주 사용되는 기능이고, 또 클론 코딩 등 공부를 하면서도 자주 사용했지만 이번에도 누군가 저에게 완벽하게 설명해보라 하면... 자신이 없어서 꼭 한 번 정리해보고 싶었습니다. 포스팅을 읽다보면 뒤의 내용이 조금씩 앞에 나올 수도 있지만 끝까지 쭉 읽어보면 이해가 될 겁니다! 그럼 Thread 부터 봅시다.Thread (스레드)Thread는 프로세스 내에서 “순차적으로 실행되는 실(실행 흐름)" 의 최소 단위이다.안드로이드 앱에서는 메인 스레드는 메시지 큐 수신을 기다리는 루프를 실행하고, 사용자 입력, 시스템 이벤트, 화면 그리기 등의 메시지가 수신되면 각 메시지에 매핑된..

Android/Theory 2022.09.03