Object Kotlin에서 object는 두가지 형태로 나뉜다. Object Declarations (객체 선언식) Object Expressions (객체 표현식) Object Declarations Kotlin에서는 Java와 다르게 Singleton Class를 사용하기 위에 Object Declarations(객체 선언)을 사용한다. Java에서는 아래 코드처럼 보통 클래스의 constructor를 private으로 선언하고, statice 변수에 클래스 객체를 저장하는 방식으로 싱글턴 패턴을 구현한다. public class Manager { private static Singleton INSTANCE; private Manager() { } public static Singleton getI..
전체 글
개발기록 / 공부한 내용을 정리하는 블로그viewModelScope.launch{ RetrofitService.naverService.getSearchNews(query = keyword, sort = "sim").run{ if (isSuccessful){ ... } else { ... } } } Retrofit을 사용할 때 Coroutine과 사용하게 되면 enqueue()의 비동기 코드를 실행하는 코드가 없어도 스스로 값을 가져오게 된다. 그래서 바로 Response를 사용해 요청 이후의 응답을 바로 받아 사용을 한다. 이 동작에 대해 이해하려 한다. enequeue의 내부적 구현 Retrofit 사용 API Interface 구현체 내부적 구현 사용 개발자는 Interface에 추상적인 api 함수들을 Retrofit Annotaion과 ..
사용 개발자는 Interface에 추상적인 api 함수들을 Retrofit Annotaion과 함께 정의한다. interface NaverApi { @GET(RetrofitService.NEWS_END_POINT) suspend fun getSearchNews( @Header("X-Naver-Client-Id") clientId : String = BuildConfig.NAVER_CLIENT_ID, @Header("X-Naver-Client-Secret") clientPw : String = BuildConfig.NAVER_CLIENT_SECRET, @Query("query") query : String, @Query("sort") sort : String, ): Call } Retrofit Builde..
Service 안드로이드 4대 컴포넌트 중 하나이며 사용자에게 인터페이스를 제공하지 않고 백그라운드에서 오래 실행되는 작업을 수행할 수 있는 애플리케이션 구성요소 다른 애플리케이션 구성 요소가 서비스를 시작할 수 있고, 다른 앱을 전환하더라도 백그라운드에서 계속 실행된다. 또한 앱 구성요소와 서비스를 바인딩하여 서비스와 상호작용 할 수 있고, 프로세스 간 통신(IPC)도 실행할 수 있다. 종류 Background Service 사용자에게 보이지 않는 백그라운드 작업을 수행하며, 시스템 리소스가 부족할 경우 강제 종료될 수 있다. API 25 이상부터는 앱이 Foreground에 있지 않을 때 백그라운드 서비스를 강제로 종료시킨다. Foreground Service 만약 서비스가 백그라운드에서 계속 돌게 ..
Backgorund 작업 구분 Background 작업으로 AlarmManager나 WorkManager, Coroutine을 사용할 수 있는데 공식 문서를 보면 사용 구분에 따라 어떠한 기술을 사용해야 할지 가이드라인을 제공하고 있다. 즉시 (Immediate) 사용자와 상호작용 요구 앱의 Scope 내부에서만 유요한: Coroutine, RxJava 앱 외부 Scope에서도 유요한: WorkManager 미디어나 스마트키 위젯에 유요한: Foreground Service 정시 (Exact) 사용자와 상호작용 요구하지 않음 정확한 시간에 작동해야함 AlarmManager 지연 (Deferred) 사용자와 상호작용 요구하지 않음 정확한 시간에 작동하지 않아도 됨 WorkManager 정확한 시간에 동작하..
사용자에게 미리 알림을 주고 다른 사람과의 소통을 가능하게 하며 앱에서 보내는 기타 정보를 적시에 제공하기 위해 Android가 앱의 UI 외부에 표시하는 메시지 Notification의 구성 전체적으로는 Notification 객체에 각종 정보를 담고 이 객체를 NotificationManager로 시스템에 등록하는 구조 SDK 33 이상부터는 Notification에 대한 권한 지정과 요청이 필요하다. (33 이상에서만 해당 권한 추가 가능) ... Manager NotificationManager : 알림을 시스템에 발생시키는 SystemService getSystemService() 함수를 이용하여 NotificationManager를 얻어서 사용하거나 NotificationManagerCompa..
2023 4월 13일 구글이 Android의 새로운 빌드 언어로 Kotlin DSL을 채택 구글이 채택한 Kotlin DSL이 무엇인지, 어떤 장점이 있는지 알아본다. Kotlin DSL Kotlin으로 작성된 도메인 특화 언어(DSL)로 Gradle, Android 등 여러 영역에서 사용되며 정적 타입 검사, 람다 함수, 확장 함수 등과 같은 Kotlin 언어의 장점을 살려 직관적인 DSL을 구축 가능하게 한다. Kotlin DSL 채택 이유 꼭 Kotlin DSL을 사용해야 하는 것은 아니나 다른 DSL의 비해서 특정 도메인이나 작업에 대해 보다 표현력이 뛰어나고 유연한 코드를 작성할 수 있도록 도와주는 도구로 채택된 것으로 본다 Kotlin DSL is Now the Default for New G..
안드로이드에서 단순한 데이터셋을 로컬에 저장하기 위해서 흔히 기본적으로 내장되어 있는 SharedPreferences를 사용한다. 하지만 Primitive data만 저장 가능했으며, 커스텀 데이터 타입 저장을 위해 GSON을 통해 Json String으로 변환하여 저장하는 코드들이 생겨났다. 그리고 미숙한 처리에 종종 Runtime Error, ANR이 날 수도 있다. SharedPreferences 단점 실제 XML 파일 I/O 작업을 하는 것으로 UI Thread에서 작업할 경우 안전하지 않음 Runtime Exception으로부터 안전하지 않음 XML 파일이기에 외부에서 쉽게 파일을 읽을 수 있음 (DataStore도 읽을 수는 있음) 비동기 API를 제공하지만 Listener를 통해서만 값을 R..
JetBrains에서 만들어진 Kotlin을 사용하여 연결된 시스템에서 비동기 서버 및 클라이언트를 구축하기 위한 오픈 소스 프레임 워크 설치, 사용이 간편하여 실행 파이프 라인에 단계를 추가하려는 경우 확장 가능하다. Coroutine의 비동기 속성으로 인해 여러 요청 수신이 가능하고 MultiPlatform이기도 하다. 즉 서버뿐 아니라 Ktor Client를 써서 Android, iOS, JS에서 마이크로서비스를 사용할 수도 있다. Ktor Client를 쓰면 요청 생성, 응답 처리 및 인증, Json 직렬화 등과 같은 기능으로 기능을 확장할 수 있다. Creating a client application | Ktor ktor.io 구현할 Android는 Client이기 때문에 Client만 알아보..