전체 글

개발기록 / 공부한 내용을 정리하는 블로그
· Kotlin/Basic
Java 동등성 연산 자바에서는 원시 타입을 비교하기 위해 == 을 사용한다. 이 경우 == 는 두 피연산자의 값이 같은지 비교하는데, 이를 동등성이라고 한다. 값이 동등하다는 것이다. int a = 1 int b = 2 System.out.println(a == b) // false 동일성 연산 참조 타입인 두 피연산자 사이에 ==을 사용할 경우 주소값으로 비교를 하게 된다. 두 피연산자의 주소값이 같은 곳을 가리키고 있다면 true를 반환한다. String의 경우 원시 타입이 아닌 참조 타입이기에, 겉으로 보이는 문자가 같아도 주소값이 다를 경우 false를 출력한다. String a = "hi" // 주소값 : 1번지 String b = "hi" // 주소값 : 2번지 System.out.print..
· Kotlin/Basic
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..
· Kotlin/Basic
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..
bumjae
Android Technote