대다수의 앱에서 로그인이나 중요한 인증이 필요한 경우 비밀번호가 아닌 얼굴 인식, 지문 인식 같은 생체 인식 인증을 요청하는 방법을 사용하는데요, 오늘은 안드로이드 프로젝트에 어떻게 적용하는지 공부해보려고 합니다! 어떤 라이브러리를 사용하고 어떻게 프로젝트에 적용하는지 알아보도록 하겠습니다. 어떤 라이브러리를 사용하는가? 안드로이드 생체 인식을 위한 라이브러리는 두 가지가 존재합니다. 바로 FingerPrintManager와 BiometricPrompt 입니다. - FingerPrintManager : API 레벨 23 ~27 - BiometricPrompt : API 레벨 28 이상 AndroidX 생체 인식 라이브러리를 사용하기 전에는 자체 인증 UI를 만들어야 했지만, AndroidX로 이전을 통해..
Kotlin에는 확장 함수(Extension Function)가 존재합니다. 확장 함수를 사용하면 여러 장단점이 존재하며 Android 개발을 할 때도 종종 사용되곤 합니다! 오늘은 확장 함수에 대해 정리해보도록 하겠습니다. 먼저 확장 함수가 무엇인지에 대해 알아보도록 하겠습니다. 확장 함수(Extension Function)이란? 코틀린은 클래스에 상속하거나 디자인 패턴을 사용하지 않고 새로운 기능으로 클래스를 확장할 수 있는 기능을 제공하는데 이것이 확장(extension)이라는 선언을 통해 이루어지게 됩니다. 이때 추가적인 메소드를 구현하면 이를 확장 함수 라고 하고 추가적인 프로퍼티를 구현하면 확장 프로퍼티라고 합니다. 마치 기본 클래스에 정의된 함수인 것처럼 새로운 기능을 추가하는 기능! 언제 ..
앱을 사용하다 보면 서버에서 데이터를 받아오는 과정에서 로딩 프로세스바나 리스트 모양이 반짝거리는 등의 효과를 볼 수 있습니다. 이러한 효과들은 사용자에게 데이터를 받아오는 중이라는 것을 명시할 수 있고, 로딩 애니메이션에는 스켈레톤 UI, 루프 애니메이션, 프로그래스 바 등 다양한 방법이 있습니다. 그중에서 오늘은 스켈레톤 로딩을 구현하는 방법에 대해 공부해보려고 합니다.! (Compose 또한 어떻게 적용하는지 궁금해서 xml과 Compose 모두 다뤄보려고 합니다.) XML 스켈레톤 UI를 구현하는 방법은 다양하지만, 가장 많이 사용되는 facebook에서 제공하는 라이브러리인 shimmer-android를 사용해보도록 하겠습니다. 우선 build.gradle에 라이브러리를 추가합니다. // Gra..
💁단일 데이터가 아닌 경우는 어떻게 할까요, 앞서 공부한 just()나 create()는 단일 데이터를 주로 다루어 보았는데요. 이번에는 단일 데이터가 아닐 경우에 어떻게 사용하는지 즉 fromXXX() 계열 함수에 대해 알아보도록 하겠습니다. fromArray() 함수 Integer[] arr = {100,200,300}; Observable source = Observable.fromArray(arr); source.subscribe(System.out::println); 🎈int [] 배열 사용하기 int[] 배열을 실제로 그대로 넣으면 올바른 실행결과가 나오지 않습니다. ⇒ toIntegerArray()를 사용해야 합니다. int[] intArray = {400,500,600}; Observabl..
블로그 이전하는김에 점점 까먹고 있는 RxJava 다시 한 번 공부해보도록 하려고 합니다. RxJava를 깊게 공부하기 전 간단한 개념 먼저 살펴보도록 하겠습니다. 리액티브 프로그래밍 데이터의 변화가 발생했을 때 변경이 발생한 곳에서 새로운 데이터를 보냄.(Push 방식) 함수형 프로그래밍의 지원이 필요 멀티 스레드 환경에서 사용할시 데드락과 동기화 문제 발생할 수 있음. Observable.just("hello") .subscribe(System.out::println); Observable 클래스 데이터의 변화가 발생하는 데이터 소스 just()함수 Observable 선언 방식 Subscribe() 함수 Observable을 구독하며 Observable은 subscribe() 함수를 호출해야 변화한..
지난번에 면접에서 해당 질문을 받았는데 제대로 답하지 못했습니다... 다시 정리하며 기억하기 위해 enum클래스와 sealed클래스의 차이점에 대해 알아보려고 합니다. Enum class vs Sealed class 👉🏻둘다 타입을 제한적으로 사용하고자 할 때 많이 사용하게 됨. - `Enum`에서는 특정 값을 single instance로서 하나의 객체만 제한적으로 사용할 수 있으며, 생성자의 형태도 동일해야만 한다. - `Sealed`에서는 state을 포함하고 있는 여러개의 instance를 가질 수 있고, 생성자도 각각의 특징에 따라서 다르게 가져갈 수 있다. ⇒ 정적인 아닌 다양한 state를 사용할 수 있다. 🎈Sealed Class - 자기 자신이 추상 클래스이고, 자신을 상속받는 여러 서브..
Dispatcher에 Coroutine을 붙이는 작업을 하기 위해서는 async와 launch 두 가지 메소드를 이용할 수 있습니다. 그렇다면 launch와 async에 차이점과 언제 사용해야하는지 알아보려고 합니다! launch란 launch를 통해 코루틴 블록을 만드는 것을 코루틴 빌더 생성이라고 하며, launch는 현재 스레드를 차단하지 않고 새로운 코루틴을 실행할 수 있으며 특정 결과값 없이 Job 객체를 반환합니다. fun main() { val job = GlobalScope.launch { delay(1000L) println("coroutine launch") } println("call in main") println("job is Active: ${job.isActive}, Compl..