Android 122

AndroidStudio > New Project > Login Activity 로 생성 시, 꽤나 좋은데?!

AndroidStudio에서 프로젝트 생성할 때 Login Activity 로 생성했더니 꽤나 좋은 샘플이 생성되어 정리해보았다. - 기본적을 MVVM, ViewModel, dataBinding viewBinding, Repository까지 모두 생성된다!! - 예전에 이걸로 공부할껄.. 플젝 생성 시 제공하는 다른 컨셉??들 프로젝트도 좀 생성해보고, 정기적으로 안드로이드 스튜디오 제공 플젝 코드 좀 봐봐야겠다. 배운점 1. 사용자 이벤트를 VM에서 받아 유효성 체크하여 에러메시지 resID값 등 각 데이터를 설정해 LoginFormState생성하여 LiveData 갱신 -> UI 갱신하는 것이 인상적 2. 결과 클래스를 >> 실제 원격 데이터 요청 및 응답에 사용하는 (Result, LoggedIn..

어노테이션으로 deprecated 에러메시지 정의

okhttp3 적용 중 함수에서 아래와 같이 에러 발생하여 들어가보니 'deprecated'에 대한 메시지였는데 이를 어노테이션 이용하여 정의해놓은 것이 신기하여 가져와 보았다. [Error message showing AndroidStudio] - message Using 'url(): HttpUrl' is an error. moved to val - screen image in IDE [Definition the upper error message ] @JvmName("-deprecated_url") @Deprecated( message = "moved to val", replaceWith = ReplaceWith(expression = "url"), level = DeprecationLevel.ER..

Android 2022.07.27

[코루틴 기초] Coroutine Builder (=코루틴 빌더)

Coroutine Builder (=코루틴 빌더) : 코루틴을 생성할 때 사용하는 여러 함수들을 일컫는 말 공통적인 라이프사이클 및 context가 정해진 몇몇 작업 등 구체적인 영역 안에서만 코루틴을 적용하므로 대표적인 함수들은 아래와 같다. Coroutine Builder 대표적 함수들(=코루틴 생성함수) cf) coroutineScope, withContext 등은 CoroutineScope 함수이다. 1. launch { .. } - 새 코루틴을 생성하고 바로 실행 - Job을 리턴함 cf) async public fun CoroutineScope.launch( context: CoroutineContext = EmptyCoroutineContext, start: CoroutineStart = C..

Android/Coroutine 2022.07.09

[코루틴 기초] suspend 함수 (= 일시 중단 함수, suspend fuction)

suspend 함수 (= 일시 중단 함수, suspend fuction) : 함수 호출 시 런타임 context를 저장 및 코루틴 실행을 일시중지하고, 나중에 필요한 시점에 다시 진행할 수 있는 함수 = 현재 스레드를 block 시키지 않고 자신을 호출한 함수를 일시 중단 시키면서도 다른 작업을 수행할 수 있다. - suspend 키워드를 붙임 - 다른 suspend 함수에서 호출하거나 코루틴 빌더에서만 호출할 수 있다. - ex) 코루틴의 delay() 함수 public suspend fun delay(duration: Duration): Unit = delay(duration.toDelayMillis()) [참조] - https://kotlinlang.org/docs/coroutines-basics...

Android/Coroutine 2022.07.08

[코루틴 기초] CoroutineContext (=코루틴 문맥, 코루틴 컨텐스트)

CoroutineContext : 코루틴의 동작을 정의하는 요소 집합 더보기 안드로이드에서 컨텍스트(Context) 처럼 코루틴의 Context라고 이해하면 쉽다. +) 안드로이드에서 컨텍스트(Context) 무엇인가? 이름 그대로 해석한다면 애플리케이션(객체)의 현재 상태의 맥락(context)를 의미합니다. 컨텍스트는 새로 생성된 객체가 지금 어떤 일이 일어나고 있는지 알 수 있도록 합니다. 따라서 액티비티와 애플리케이션에 대한 정보를 얻기 위해서는 컨텍스트를 사용하면 됩니다. - 코루틴의 영구적 context로 코루틴에서 사용할 여러 정보값들을 가지고 있다. - 코루틴마다 ConroutineContxt 인터페이스로 표현되는 context과 연관되어 있다. - 코루틴 영역(CoroutineScope)..

Android/Coroutine 2022.07.08

[코루틴 기초] Job

Job : '코루틴의 핸들'로 실행 중인 취소가능한 작업을 표현 - 코루틴을 고유하게 식별하고 수명 주기를 관리한다. - '코루틴 빌더' 실행 시 생성된다. => launch 또는 async로 만드는 각 코루틴은 Job 인스턴스를 반환 - 백그라운드 작업 - Job을 CoroutineScope에 전달하여 코루틴의 수명 주기를 추가로 관리 가능 ex) class ExampleClass { ... fun exampleMethod() { // Handle to the coroutine, you can control its lifecycle val job = scope.launch { // New coroutine } if (...) { // Cancel the coroutine started above, th..

Android/Coroutine 2022.07.08

[코루틴 기초] CoroutineScope (=코루틴 영역, 코루틴 스코프)

CoroutineScope : (코루틴의 라이프사이클을 시작하고 제어하기 위해 생성되는) 코루틴 지정 범위 ㄴ> Ex) CoroutineScope가 전역 역역(global scope)인 경우(= 코루틴의 전역 영역에서 실행된 경우), -> 코루틴의 생명주기가 전체 어플리케이션의 생명주기에 의해서만 제약되는 영역이 된다. - (CoroutineScope의 확장 함수인) 'launch' 또는 'async'를 사용하여 코루틴 실행 및 생성한 모든 코루틴을 추적함 cf) 디스패처와 달리 CoroutineScope는 코루틴을 실행하지 않는다. 더보기 BuildersKt.class public fun CoroutineScope.launch( context: CoroutineContext = EmptyCoroutin..

Android/Coroutine 2022.07.08

Coroutine 예제로 개념잡기

안드로이드 공식문서 예제 따라하는 포스팅입니다. 1. 백그라운드 스레드에서 실행 예제 - '네트워크 요청' 작업은 작업이 지연되거나 부하되는 경우 문제가 되므로 이 작업을 코루틴에서 백그라운드 스레드에서 이 작업을 실행해보고자 한다. ▽ 네트워크 요청을 기본 스레드에서 했을 때 위험상황 더보기 기본 스레드에서 네트워크 요청을 보내면 응답을 받을 때까지 스레드가 대기하거나 차단됩니다. 스레드가 차단되는 경우 이로 인해 OS는 onDraw()를 호출할 수 없으므로 앱이 정지되고 애플리케이션 응답 없음(ANR) 대화상자가 표시될 수 있습니다 위와 같은 문제를 가진 코드가 아래와 같으며 문제해결을 위해 코루틴을 적용한다. ▽ 1) 네트워크 요청 작업 (@Repository클래스) sealed class Resu..

Android/Coroutine 2022.07.08

Coroutine 기초

Coroutine 이란? : 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴 - 코루틴 은 일시 중단 가능한 계산의 인스턴스 코드의 나머지 부분과 동시에 작동하는 코드 블록을 실행한다는 점에서 개념적으로 스레드와 유사합니다. - 그러나 특정 스레드에 바인딩되지 않습니다(스레드 단위와 관련없음!) 한 스레드에서 실행을 일시 중지하고 다른 스레드에서 다시 시작할 수 있고, 한 스레드 내에서 여러 코루틴이 실행되기도 한다. - 실행을 일시중단 했다가 나중에 중단 시점부터 다시 실행 재개할 수 있다. - 모든 코루틴은 범위(Scope) 내에서 실행해야 합니다. 필요성 - 스레드는 값비싼 리소스이고 스레드를 차단하는 것은 비효율적이고 종종 바람직하지 않기 때문에..

Android/Coroutine 2022.07.08

Room

Room : SQLite(스마트폰 내장 DB)에 데이터를 저장하기 위해 사용하는 라이브러리 - SQLite를 활용해서 객체 매핑을 해주는 역할을 한다.(SQLite에 추상화 계층을 제공) - Room을 사용하면 다음과 같은 이점이 있습니다. 더보기 SQL 쿼리의 컴파일 시간 확인 반복적이고 오류가 발생하기 쉬운 상용구 코드를 최소화하는 편의 주석 간소화된 데이터베이스 이전 경로 0.설정 dependencies { val roomVersion = "2.4.2" implementation("androidx.room:room-runtime:$roomVersion") annotationProcessor("androidx.room:room-compiler:$roomVersion") // To use Kotlin ..

ViewModel

ViewModel 안드로이드는 화면 회전과 같이 구성을 변경할 때 UI 컨트롤러를 제거하거나 다시 만들어지면서 UI 컨트롤러에 저장된 모든 일시적인 UI 관련 데이터가 삭제됩니다. cf) 그래서 기존에는 onSaveInstanceState() 메서드를 사용하여 데이터 삭제 전 보관하였으나 제한적이었습니다. 더보기 onSaveInstanceState() 메서드를 사용하여 onCreate()의 번들에서 데이터를 복원할 수 있습니다. 하지만 이 접근 방법은 1) 사용자 목록이나 비트맵과 같은 대용량일 가능성이 높은 데이터가 아니라, 직렬화했다가 다시 역직렬화할 수 있는 소량의 데이터에만 적합합니다. 2) 다른 문제는 UI 컨트롤러가 반환하는 데 시간이 걸릴 수 있는 비동기 호출을 자주 해야 한다는 점입니다. ..

LiveData

LiveData - LiveData는 구독 시 Android Lifecycle을 따르도록 구현되어 있다. - LiveData는 항상 최신 데이터만을 보증한다. 이유는 위에서 보았던 setValue를 보면 알 수 있다. setValue는 어떠한 처리도 없는 단순 변수이다. 변수는 항상 마지막 데이터만을 들고 있을 수 있다. - LiveData는 항상 MainThread에서 사용할 값을 보증한다. (setValue를 하든 postValue를 하든) 0. 설정 def lifecycle_version = "2.3.0" // ViewModel implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" // LiveData imple..

ViewBinding vs DataBinding

ViewBinding ViewBinding을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있다. View Binding은 각 XML 레이아웃 파일의 Binding 클래스를 생성한다. Binding 클래스의 인스턴스에서 레이아웃에 ID가 있는 모든 뷰의 직접참조를 할 수 있다. 즉, 간단하게 findViewByID를 쓰지 않고 XML의 view component에 접근하는 object를 반환받아서 view에 접근하는 방식이다. 여기서 object는 Android Studio에서 자동으로 대신 만들어준다. viewBinding은 findViewById를 대체하기 위한 방법으로만 사용된다. 따라서 기존에 제공되는 dataBinding과 viewBinding을 같은 모듈에서 동시에 사용할 수도 있다. (v..

OAuth, OAuth2.0, OpenID Connect

OAuth("Open Authorization")는 - 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다. - 소위 말하는 '구글, 페이스북, 카카오, 네이버 등으로 로그인하기' 기능들 OAuth 2.0(Open Authorization 2.0, OAuth2)은 - 인가을 위한 개방형 표준 프로토콜 - Third-Party 프로그램에게 리소스 소유자를 대신하여 리소스 서버에서 제공하는 자원에 대한 접근 권한을 위임하는 방식을 제공 - 구글, 페이스북, 카카오, 네이버 등에서 제공하는 간편 로그인 기능도 OAuth2 프로토콜 기반의 사용자 인증 기능을 제공..

Android 2022.07.03

[book][공부중] 코틀린 완벽 가이드 "4장 클래스와 객체 다루기"

아래 책 공부하며 '새롭게 배운 점', '더 궁금해진 것', '자주 까먹는 부분'들에 대한 포스팅입니다. 코틀린 완벽 가이드 입문부터 활용까지, 필요한 지식 총망라! 별점 10.0 | 네티즌리뷰 3건 저자 알렉세이 세두노프|역자 오현석|길벗 |2022.02.28 원제Kotlin in-depth : a comprehensive guide to modern multi-paradigm language. 1-2 페이지 704|ISBN 9791165218911|판형 규격외 변형 "4장 클래스와 객체 다루기" 1. 주 생성자 (Primary constructor) - 클래스 헤더의 파라미터 목록이며 생략해도 무관 - 실행문 포함되지 않음 => 초기화 처리는 init 블록에서 가능 class Person(name: ..

Android/Kotlin 2022.06.18

[book][공부중] 코틀린 완벽 가이드 "3장 함수 정의하기"

아래 책 공부하며 '새롭게 배운 점', '더 궁금해진 것', '자주 까먹는 부분'들에 대한 포스팅입니다. 코틀린 완벽 가이드 입문부터 활용까지, 필요한 지식 총망라! 별점 10.0 | 네티즌리뷰 3건 저자 알렉세이 세두노프|역자 오현석|길벗 |2022.02.28 원제Kotlin in-depth : a comprehensive guide to modern multi-paradigm language. 1-2 페이지 704|ISBN 9791165218911|판형 규격외 변형 "3장 함수 정의하기" 1. 파라미터 - 파라미터 앞에 var 나 val 사용불가 - 반드시 타입 지정해야함 - 함수 호출 시 인자값으로 초기화되는 불변 지역변수 - 파라미터가 참조타입(Call by Ref)인 경우 파라미터는 변경 불가하..

Android/Kotlin 2022.06.14

[book][공부중] 코틀린 완벽 가이드 "2장 코틀린 언어 기초"

아래 책 공부하며 '새롭게 배운 점', '더 궁금해진 것', '자주 까먹는 부분'들에 대한 포스팅입니다. 코틀린 완벽 가이드 입문부터 활용까지, 필요한 지식 총망라! 별점 10.0 | 네티즌리뷰 3건 저자 알렉세이 세두노프|역자 오현석|길벗 |2022.02.28 원제Kotlin in-depth : a comprehensive guide to modern multi-paradigm language. 1-2 페이지 704|ISBN 9791165218911|판형 규격외 변형 "2장 코틀린 언어 기초" 1. 주석 자바와 달리 코틀린은주석 안에 주석을 쓸 수 있음 /** * 여러 줄 주석 * /** 주석 안에 주석도 주석 처리 cf) 자바에서는 닫힘 쓰는 순간 주석 풀림 */ */ /** * 여러 줄 주석 * /..

Android/Kotlin 2022.06.13