[안드로이드 / Kotlin] Dagger Hilt
·
Android
안녕하세요! 오늘은 안드로이드 개발에 자주 사용되고 있는 의존성 라이브러리 Dagger Hilt에 대해 알아보도록 하겠습니다. Hilt에 대해 소개하기 앞서 먼저 의존성이 무엇인지 이해하는 것이 중요합니다. 의존성이란? A클래스가 자체적인 B클래스를 구성하는 것을 의미합니다. 단지 이 문장만으로는 이해하기 어려우니 간단한 예제를 통해 알아보도록 하겠습니다😊 의존성 주입(DI) 이란?🤔 class Car { private val engine = Engine() fun start() { engine.start() } } fun main(args: Array) { val car = Car() car.start() } 위 코드를 살펴보면 Car 클래스는 내부에서 Engine 이라는 클래스를 만들어 사용하고 있습..
[안드로이드 / Kotlin] Room
·
Android
안녕하세요! 오늘은 안드로이드 앱 개발에 있어서 자주 사용되는 내부 저장소(DB) Room에 대해 알아보도록 하겠습니다. 이전까지는 효과적인 데이터 관리를 위해 파일 형식으로 데이터를 저장하는 관계형 DB인 SQLite를 주로 사용했었는데, 안드로이드 공식 문서에 따르면 아래와 같은 이유로 Room의 사용을 권장하고 있습니다. SQL 쿼리의 컴파일 시간 확인 반복적이고 오류가 발생하기 쉬운 상용구 코드를 최소화하는 편의 주석 간소화된 데이터베이스 이전 경로 Room이란?🤔 Room이란 AAC(Android Architecture Componets)로서 스마트폰 내장 DB에 데이터를 저장하기 위해 사용하는 라이브러리입니다. Room은 ORM(Object Relational Mapping) 라이브러리로 DB..
[안드로이드 / Kotlin] ViewModel(뷰모델)
·
Android
안녕하세요! 오늘은 최근 안드로이드 개발 패턴 중에 자주 쓰이고 있는 MVVM 패턴에서 VM을 담당하는 ViewModel(뷰모델)에 대해 간단히 알아보도록 하겠습니다. 뷰모델의 탄생 배경🤔 안드로이드 공식 개발문서에서는 ViewModel에 탄생 배경에 대해 아래와 같이 설명하고 있습니다. Android 프레임워크는 활동과 프래그먼트 같은 UI 컨트롤러의 수명 주기를 관리합니다. 프레임워크는 특정 사용자 작업이나 완전히 통제할 수 없는 기기 이벤트에 대한 응답으로 UI 컨트롤러를 제거하거나 다시 만들도록 결정할 수 있습니다. 시스템에서 UI 컨트롤러를 제거하거나 다시 만드는 경우, 컨트롤러에 저장된 모든 일시적인 UI 관련 데이터가 삭제됩니다. 예를 들면 앱 활동 중 하나에 사용자 목록이 포함되어 있는데,..
[안드로이드 / Kotlin] 키해시(Key Hash) 얻기
·
Android
안드로이드 개발에 있어 카카오 API, 구글 API, 페이스북 API등등 여러 방면에 있어서 키해시(Key Hash)를 요구하는 경우가 많습니다. 키해시는 OpenSSL과 터미널을 이용해 얻을 수도 있지만, 오늘은 소스코드 상에서 얻는 방법에 대해 소개하고자 합니다. // 키해시 출력 @RequiresApi(Build.VERSION_CODES.P) fun printKeyHash(context: Context) { try { val packageInfo = context.packageManager.getPackageInfo( context.packageName, PackageManager.GET_SIGNING_CERTIFICATES ) val signingInfo = packageInfo.signingIn..
[안드로이드 / Kotlin] 코루틴(Coroutine)
·
Android
요즘 안드로이드에서 네트워크 통신은 필수사항이 되었습니다. 네트워크 통신이 많아짐에 따라서 비동기 처리에 대한 관심이 자연스레 높아지고 있습니다. 비동기 처리 구현방법 중에 많이들 사용하시는 방법에는 Rx가 있는데, Rx의 경우 학습에 오랜 시간이 걸려 진입 장벽이 매우 높은 것으로 알려져있습니다. Rx외 또다른 비동기 처리 구현방법으로 코루틴(Coroutine)이 있는데, 오늘은 코루틴에 대해 간단하게 알아보도록 하겠습니다. 코루틴(Coroutine)이란? 코루틴(Coroutine)은 안드로이드에서 제공하는 백그라운드 스레드 처리방법 중 하나입니다. 기존 안드로이드에서는 AsyncTask라는 비교적 간편한 방법을 이용했었는데, 이는 성능도 낮고 현재 Deprecated 되어 점점 사용하지 않는 것이 추..
[안드로이드 / Kotlin] 타이머(Timer) 구현하기
·
Android
안녕하세요! 오늘은 코틀린에서 제공하는 'kotlin.concurrent.timer'를 이용한 타이머를 구현하는 방법에 대해 간단하게 알아보도록 하겠습니다. Timer 기본개념 Timer는 메인스레드가 아닌 백그라운드 스레드에서 동작가능합니다. 따라서 메인스레드에서만 가능한 UI작업이 불가능지만 이부분은 Handler 및 runOnUiThread()를 이용하면 충분히 구현이 가능합니다. 오늘은 이 두가지외 코루틴을 이용해서 구현하는 방법을 알아보도록 하겠습니다. 사용방법 private var time: Timer? = null fun startTimer(milisec: Int) { var time = milisec timer?.cancel() timer = kotlin.concurrent.timer(pe..
[안드로이드 / Kotlin] BottomSheetDialogFragment
·
Android
안녕하세요! 최근 안드로이드 앱들을 살펴보면 기존 우리가 알고있던 다이얼로그와는 조금은 다르게 아래에서 위로 올라오는 구조로 되어있는 다이얼로그를 종종 볼 수 있습니다. 그래서 오늘은 그런 다이얼로그를 BottomSheetDialogFragment를 이용하여 간단히 구현하는 방법을 소개하고자 합니다. Gradle 추가하기 implementation 'com.google.android.material:material:1.5.0' 코드예시 android:windowIsFloating true : 자식 뷰만큼의 뷰사이즈를 가집니다. false : 다이얼로그가 전체화면을 가집니다. android:navigationBarColor 하단 네비게이션 색을 정합니다. 저같은 경우 다이얼로그가 흰색 바탕인 반면, 하단의..
[안드로이드 / Kotlin] RecyclerView Drag&Drop / Swipe 구현
·
Android
오늘은 안드로이드에서 RecyclerVIew를 사용할때 외부 라이브러리 없이 Drag&Drop으로 아이템의 위치를 변경하거나, Swipe로 아이템을 삭제하는 방법에 대해 알아보도록 하겠습니다. 먼저 해당 기능을 사용하기 위해 ItemTouchHelper.Callback을 상속받은 콜백 클래스 ItemTouchHelperCallback 정의합니다. 이벤트가 발생하여 콜백이 오면 필요한 정보를 전달할 인터페이스 OnItemMoveListener를 정의합니다. 해당 리스너를 편의를 위해 ItemTouchHelperCallback의 파라미터로 놓고, 아이템 움직임에 따른 onItemMoved()와 스와이프에 따른 onItemSwipe() 메소드를 각각 구현해서 사용하시면 됩니다. /** * RecyclerVie..
[안드로이드 / Kotlin] 저전력 블루투스 BLE(3), 기기 연결
·
Android
지난 2편에서는 BLE 기기를 스캔하는 방법에 대해 알아보았습니다. 이어서 오늘은 스캔한 BLE 기기를 연결하는 방법에 대해 간단하게 알아보도록 하겠습니다. BLE 2편 : https://sjunh812.tistory.com/27 [안드로이드 / Kotlin] 저전력 블루투스 BLE(2), 스캔 지난 1편에서는 BLE의 기본개념 및 사용에 있어 준비해야할 몇 가지에 대해 알아보았습니다. 오늘은 안드로이드 내 블루투스 사용에 있어 저전력 블루투스(BLE)를 이용하여 다른 BLE기기를 찾는 sjunh812.tistory.com GATT서버 연결 BLE 기기와의 연결은 곧 GATT 서버에 연결한다는 의미와 같습니다. GATT란? 1편에서 소개한 개념으로, 속성이라고 알려진 적은양의 데이터를 주고 받기위한 일반..
[안드로이드 / Kotlin] 화면 전환 시 작업 처리, 구성 변경 처리(onConfigurationChanged)
·
Android
앱의 화면을 회전하게 되면 해당 액티비티내 onCreate()가 재호출되어 이미 저장했던 데이터들이 날아가는 이슈가 발생해 대개 화면모드를 세로 고정으로 하는 경우가 많습니다. 하지만 최근 태블릿을 이용하는 사람들이 많아지고 있기 때문에 화면회전을 허용 가능하게 개발 하려는분들도 많을 것입니다. 그래서 오늘은 '구성 변경 처리' 라는 간단한 개념을 통해 화면 회전 및 기타 구성 변경 이후 발생하는 이슈를 최소화 하기 위한 방법을 알아보도록 하겠습니다. 화면 회전이 발생 즉, 구성 변경이 발생하게 된다면 해당 액티비티에서는 onDestroy(), onCreate()를 호출함으로서 새로운 기기 구성에 앱이 적응할 수 있도록 시스템이 설계되어 있습니다. 여기서 재시작 이후에도 이전 상태를 복원하는 것이 핵심이..