전체 글 25

[안드로이드] 단위 테스트를 도와주는 JUnit 5

JUnit5 Java 언어로 작성된 자동화된 단위 테스트 프레임워크 테스트 케이스를 작성하기 쉽게 만들어주어 단위 테스트를 할 수 있도록 도와준다. 다만, 단위 테스트를 위한 프레임워크이기 때문에 주로 클래스, 메소드 등을 테스트할 때 사용한다. JUnit 은 생각보다 가까이 있었다. 일반적으로 안드로이드 스튜디오 또는 인텔리제이 코틀린 프로젝트를 생성하면 그림 1처럼 main 패키지 말고도 test 패키지가 생성된 것을 볼 수가 있다. 이 것이 IDE 자체에서 JUnit 5으로 테스트를 실행할 수 있는 test 전용 경로로 지정되어있다. 또한 build.gradle에선 이미 JUnit을 Implementation하고 있다. 보다싶이 이미 IDE에서 JUnit을 지원하고 있다. JUnit 5의 구조 먼저..

Android 2023.10.29

[안드로이드]Retrofit2 에 관하여

Retrofit2 sqaure 사에서 개발한 안드로이드 앱에서 웹 서버와 통신하기 위한 라이브러리 중 하나로, Http 요청을 쉽게 만들고 처리할 수 있게 해줍니다. 기존에 있던 OkHttp을 사용하는 라이브러리로 비슷한 기능을 하는 Volley와 비교해도 높은 성능을 가지고 있어 많이 사용됩니다. Retrofit2의 장점 1. 높은 성능 출처 : Speed Comparison of Retrofit and Volley. | Download Scientific Diagram (researchgate.net) 비슷한 역할을 하는 Volley와 쿼리 성능을 비교한 그래프입니다. 위 그래프를 보시면 데이터 수가 많아지면 많아질수록 차이가 현저히 발생한다는 것을 알 수가 있습니다. 2. 간편한 사용성 및 높은 가..

Android 2023.09.17

[안드로이드]페이징(Paging) - 1 (개념 위주)

페이징이란? 데이터를 일정한 크기로 나눠서 가져오는 걸 페이징이라고 합니다. 왜 나눠서 가져올까요? 이는 네트워크 대역폭과 리소스가 한정되어 있다는 현실적인 이유가 있기 때문입니다. 만약 여러분이 네이버와 같이 규모가 매우 큰 사이트를 운영한다고 생각해 봅시다. 사용자가 검색을 하게 되면 그에 대한 정보를 보여줘야 합니다. 근데 블로그, 뉴스 등 너무나도 많은 정보가 있습니다. 이를 검색하자마자 다 로딩을 시킨다면? 사용자는 검색 결과 화면을 못 볼 수도 있습니다. 그렇기 때문에 페이징이 필요합니다. 최소로 필요한 단위를 지정하고 그 정도만 데이터를 가져오고 사용자가 추가로 요청하게 되면 추가로 불러오는 겁니다. 페이징이 적용된 예시 중 대표적인 것이 바로 검색 시 맨 밑에 있는 페이지 버튼입니다. 안드..

Android 2023.09.10

[안드로이드] LiveData에 관하여

안드로이드 개발을 진행할 때 꼭 보게 되는 친구가 있습니다. 바로 LiveData 인데 보통 ViewModel에 LiveData를 저장한 뒤 데이터 바인딩을 사용해 UI와 결합시키고 그 값을 계속해서 Observe 하여 UI를 갱신합니다. 처음 LiveData를 접할 땐 그냥 좋으니까 쓰면 된다 이런 식으로 배워서 아무 생각없이 쓰고 있었습니다. 그러다가 문득 이 LiveData에 관해 궁금해져서 공부 겸 이 글을 쓰게 되었습니다. LiveData란? Android Jetpack 라이브러리의 일부로, 안드로이드 수명 주기를 관찰 가능한 데이터 홀더 클래스 라고 안드로이드 공식 문서에서 정의하고 있습니다. 클래스이긴 한데 관찰(Observe)을 한다는데 이게 뭔 말일까요?? 이걸 이해하기 위해선 옵저버(O..

Android 2023.08.24

[안드로이드]안드로이드 앱 모듈화

모듈화에 앞서 모듈이 뭔지 알아봅시다. 모듈이란?? 소스 파일 및 빌드 설정으로 구성된 모음이며, 이를 통해 프로젝트를 별개의 기능 단위로 분할할 수 있습니다. 프로젝트에는 하나 이상의 모듈이 포함될 수 있으며, 하나의 모듈이 다른 모듈을 종속 항목으로 사용할 수 있습니다. 각 모듈을 독립적으로 빌드, 테스트, 디버그할 수 있습니다. Gradle일 경우 모듈 또한 프로젝트로 취급하기 때문에 모듈은 하위 프로젝트라고도 칭합니다. 모듈의 종류 안드로이드 공식 문서에서 제시하는 모듈의 종류는 다음과 같습니다. 1. 안드로이드 앱 모듈 앱 소스 코드, 리소스 파일, 앱 수준 설정을 포함한 모듈로 안드로이드 스튜디오에서 새 프로젝트로 만들면 나오는 'app'이 이 안드로이드 앱 모듈 중 하나입니다. 2. 기능 모..

Android 2023.08.13

[안드로이드]CameraX(Preview, ImageCapture)

CameraX란? 개발자가 더 쉽게 카메라 기능을 구현할 수 있도록 만든 JetPack 라이브러리 안드로이드 공식 문서에선 카메라 앱 제작 시 CameraX를 사용하도록 권고하고 있습니다. 주요 특징 1. 광범위한 기기 호환성 Android 5.0(API 25)까지 지원됩니다. 이는 기존 안드로이드 기기의 98% 이상입니다. 2. 사용 편의성 광범위한 기기의 호환성을 고려하며 CameraX에선 카메라에서 기본적으로 필요한 기능들을 기본적으로 제공합니다. 1) 미리보기(Preview) 카메라로 보여지는 화면을 앱 상에 띄우는 기능입니다. 2) 이미지 캡처(ImageCapture) Preview로 가져온 이미지를 캡처하여 MediaStore에 저장하는 기능입니다. 3) 이미지 분석(ImageAnalysis)..

Android 2023.08.06

[안드로이드] CustomTextView

CustomView이란? 안드로이드에서 기본적으로 제공하는 TextView, EditText, Button 등은 당연하게도 설정할 수 있는 속성값들이 정해져있다. 만약 사용자가 제공하지 않는 기능을 만들고 싶다면 사용하는 것이 CustomView이다. 이 글에선 AppCompatTextView 클래스를 상속 받은 CustomTextView를 만들고자 한다. CustomTextView 구현 과정 1. 뷰를 정의한다. values 패키지에 attrs.xml로 파일을 생성한다. CustomTextView의 이름을 CustomText라 짓고 추가할 속성들의 이름을 prefixText, showText 로 각각 정의하였다. 해당 속성에 맞는 format을 사용해주면 된다. 만약 enum 값을 사용하고 싶다면 다음..

Android 2023.07.30

[안드로이드] 서비스

서비스 안드로이드 4대 컴포넌트 중 하나로 사용자가 직접 상호작용하지 않고 백그라운드에서 실행되는 컴포넌트 특징 1. 백그라운드라 다른 스레드이라고 생각하기 쉽지만 메인 스레드에서 작동하기 때문에 '화면이 없는 액티비티'라고 생각하면 편함 2. '메인 스레드에서의 작동' 이라는 특징 때문에 기존 백그라운드 처리와 다른 개념으로 접근해야 함 => 별도의 스레드를 생성하는 방식으로 처리 서비스 실행 방식 크게 스타티드 서비스, 바운드로 구분 됨 스타티드 서비스 startService() 메서드를 호출하여 액티비티와 상관없이 독립적으로 동작할 때 사용함 이 때문에 일반적으로 백그라운드에서 많이 사용하는 방식 이미 백그라운드 서비스가 동작 중인 상태에서 서비스의 재시작을 요청할 경우 새로 만들지 않고, 생성되어..

Android 2023.07.22

[안드로이드] 콘텐츠 제공자(ContentProvider) 와 콘텐츠 리졸버(ContentResolver)

ContentProvider란? 앱이 자체적으로 저장한 데이터, 다른 앱이 저장한 데이터에 대한 액세스 권한을 관리하도록 돕고 다른 앱과 데이터를 공유할 수 있는 표준 인터페이스 특징 1. 데이터를 캡슐화하기 때문에 데이터의 보안을 유지할 수 있음 2. 1번의 영향으로 다른 앱의 데이터에 안전하게 액세스하여 이를 수정할 수 있음 3. 데이터 접근 권한이 세부적으로 나누어져있어 원하는 데이터만 공유할 수 있음 4. 앱의 여러 가지 데이터 소스들을 추상화하여 사용이 가능함 5. 데이터는 관계형 데이터베이스 테이블과 유사한 테이블로 표시 됨 6. 콘텐츠 제공자를 구현할 수 있지만 직접 구현할 일은 잘 없고 콘텐츠 제공자로부터 미리 만들어진 데이터를 가져오는 콘텐츠 리졸버(ContentResolver)를 주로 ..

Android 2023.07.16