본문 바로가기

Android

(21)
[Android] Logger 라이브러리 확장하여 로그 파일로 저장하기 개요 안드로이드 개발을 하며 디버깅을 위한 로그 확인에서 나아가, 실제 사용자가 애플리케이션을 사용하며 생긴 이슈는 어떻게 확인할 수 있을까요? 방법은 바로 이슈 발생 가능성이 있는 로직에 로그를 작성하고 파일로 저장하여 개발자가 직접 확인하는 것입니다. Log 확인을 위해 Logger 라이브러리를 사용하였고, Logger 라이브러리 소개 문서를 확인하시면 도움이 됩니다. 하지만 로그를 파일로 저장하기 위해 공식 문서와 해당 소스코드를 확인해 보니 몇 가지 제약사항이 있었습니다. 첫째는 로그 파일은 앱 외부 디렉터리에 저장되고(저장 위치 변경 불가), 둘째는 고정된 500K의 파일 크기를 변경할 수 없다는 점이었습니다. 그래서 오픈소스인 Logger의 저장 관련 코드(Java)를 참고하여 확장 가능한 새..
[Android] 깔끔한 Log를 사용하여 생산성 향상하기 개요 개발을 하며 중간중간 디버깅을 위해 로그를 작성하여 Android Studio의 Logcat을 통해 확인하곤 합니다. 안드로이드에서 기본으로 제공하는 android.util의 Log를 많이 사용하는데, 로그 작성을 위해 별도의 태그를 지정해야 하고 해당 로그의 구체적인 정보를 포함하지 않습니다. 그래서 로그를 깔끔하고 보여주고 로그의 구체적인 정보를 출력하는 Logger 라이브러리를 소개하고자 합니다. 우선, 안드로이드에서 기본으로 제공하는 Log와 Logger 라이브러리를 통해 출력되는 로그를 비교해 봅시다! Log.d(tag, "Hello HomeFragment!") Logger.d("Hello HomeFragment!") 예시로 HomeFragment에서 "Hello HomeFragment!"..
[Android] RecyclerView를 사용해야 하는 이유 (feat. ListView) 안드로이드에서는 ListView 또는 RecyclerView를 사용하여 데이터 목록을 스크롤 가능한 리스트 형태로 화면에 보여줄 수 있다. ListView vs RecyclerView 먼저 간단한 특징과 차이점을 알아보자. ListView : 데이터 목록을 스크롤(세로 방향만 가능) 형태로 화면에 보여주는 가장 기본적인 방법 RecyclerView : 대량의 데이터 목록을 재활용 가능한 형태로 화면에 효율적으로 보여주는 방법 (ViewHolder 패턴 사용) ViewHolder란, 데이터 목록 중 개별 항목을 보여주기 위한 뷰를 가지고 있는 객체 두 방법 모두 Adapter를 통해 개별 항목의 뷰를 바인딩 하여 화면에 리스트 형태로 보여준다. 하지만 차이점을 위한 예시로 1000개의 데이터 목록을 보여주..
[Android] 웹뷰 스크롤 하단에 native 버튼 위치시키는 방법 개요 WebView란 애플리케이션에서 웹페이지를 보여주고자 할 때 사용한다. 주로 사용자 가이드, 서비스 이용약관, 이벤트 페이지 같은 업데이트해야 할 정보가 있는 경우이다. 특히 스크롤 형태의 웹페이지를 애플리케이션에서 WebView 전체 화면으로 사용한다면 문제가 없지만, 스크롤이 끝난 웹페이지 하단에서 버튼을 사용하고 싶다면 어떻게 처리하는지 다루고자 한다. 방법 NestedScrollView를 사용하는 것이다! 최상위 레이아웃을 NestedScrollView로 감싸고 fillViewport 옵션 활성화 (웹페이지 높이(스크롤 여부)와 상관없이 항상 버튼 하단에 위치시키기 위함) 그다음 WebView의 height는 wrap_content Button의 위치는 상단 제약으로 WebView 아래 / ..
[Android] Realm 데이터베이스 사용하기 Realm? Realm이란 모바일 데이터베이스로 SQLite를 대체할 수 있다. SQLite와 달리 데이터를 객체 형태로 구성하기에 데이터 쿼리 시 SQL문법을 몰라도 사용할 수 있다. 다른 모바일 데이터베이스보다 성능이 좋고, 커뮤니티가 활발하다. 사용하기 1. 프로젝트의 build.gradle 파일에 realm 종속성을 추가한다. buildscript { repositories { google() mavenCentral() } dependencies { classpath "com.android.tools.build:gradle:7.0.2" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.30" classpath "io.realm:realm-grad..
[Android] Custom Dialog 사용하여 ID, PW 받아오기 안드로이드 개발을 하다 보면 화면 위에 작은 창을 띄워 간단한 처리가 필요하다. 이런 경우 AlertDialog를 사용하고, 사용자에게 안내를 하거나 확인, 취소 버튼의 이벤트를 처리할 수 있다. 하지만 기본으로 제공되는 AlertDialog를 통해서는 사용자 입력에 대한 값을 처리할 수 없고, 디자인을 수정하기에도 제약이 있다. 이 제약사항들을 해결하고자 자주 사용하는 Custom Dialog를 소개하려고 한다. 사용방법 1. Dialog의 화면(layout)을 정의한다 2. Dialog의 클래스를 정의한다 3. 결과값을 넘겨주기 위한 리스너를 정의한다 1. Dialog의 화면(layout)을 정의한다 id, password를 입력받고 완료 처리를 위한 확인 버튼을 정의했다. fragment_custo..
[Android] 유용한 Plugin 소개 (JsonToKotlinClass) 소개 안드로이드 스튜디오의 플러그인 중 "JsonToKotlinClass"에 대해 소개하려고 한다. Api 개발 시 요청 후 결과응답에 대한 data class(DTO)를 구현하는 것은 참 귀찮은 작업이다. 또한 안드로이드에서 코틀린 가이드에 따라 네이밍은 camelCase를 사용하는 반면, 서버의 응답 결과의 네이밍은 snake_case를 주로 사용하기에 DTO 구현 시 하나의 변수에도 매핑을 위해 별도의 선언을 해주어야한다. 이러한 귀찮은 작업들을 편하게 처리하도록 도와주는 플러그인이 바로 "JsonToKotlinClass"이다. 사용방법 예시로 Github Api를 사용하였고, 아래와 같은 Json 형태의 응답결과가 있다. Android Studio에서 플러그인을 설치한다. Mac기준 (Prefer..
[Android] Retrofit2 사용하여 API 통신하기 Retrofit 이란, 대표적인 REST API 통신 라이브러리입니다. OkHttp를 네트워크 계층으로 활용하고 그 위에 구축되었습니다. HttpUrlConection과 OkHttp의 반복 작업을 대신 해주어 간편하게 사용할 수 있습니다. 컨버터를 이용한 객체 매핑과 코루틴을 지원합니다. API 구현 시 Tip, 1. Postman을 사용하여 미리 API에 대한 테스트 및 응답결과를 확인할 수 있다. 2. 안드로이드 스튜디오에서 플러그인 Json to Kotlin Class을 사용하여 Json타입의 응답결과를 입력하면 DTO Class를 자동으로 생성해준다. 사용방법, 테스트를 위해 Github API를 사용했으며, Kotlin으로 작성하였고 비동기 처리는 Coroutines을 사용했습니다. 라이브러리 ..