전체 글 241

안드로이드 KTS 개념 및 적용 : Build gradle을 Groovy언어가 아닌 Kotlin으로 짜보자

Gradle 구성 파일(build.gradle 등)에서 사용하던 Groovy언어 대신 Kotlin을 사용가능하다고 한다. 물론 우리가 그냥 사용하는 Kotlin이 아닌 Kotlin script인 'KTS'라는 형태로! 심지어 안드로이드, Gradle 공식사이트들도 앞으로 이게 더 우세할 거라 선언까지 해놨다. ▽ 하지만 나름 단점도 있으니 잘 알고 적용해야한다. 우선, DSL이 뭔지 알아야 한다. Groovy도 DSL이고, KTS도 DSL이다. DSL (Domain Specific Language)이란? - '특정 분야에 최적화된 프로그래밍 언어'를 일컫는다. Ex) SQL, CSS, 정규표현식, make 등 더보기 = '특정 영역(도메인)에 초점을 맞추고 기능을 제한함으로써 간결&효율적으로 목표를 달성..

Wrapper class (래퍼 클래스)

선수개념 자바의 자료형은 크게 기본 타입(primitive type)과 참조 타입(reference type)이 있다. - Primitive type : char, int, float, double, boolean 등 - Reference type : class, interface 등 "Primitive type 을 Reference type 객체로 바꾸기 위해서 (포장해) 사용하는 클래스" 들을 ' Wrapper class (래퍼 클래스) ' 라고 합니다. 사용이유: primitive type의 데이터를 Reference type 객체로 표현해야 하는 경우가 있기에 변경방식 : primitive type의 데이터 값을 내부에 불변으로 두고 포장하여 만든다. (값 변경 시 새로 객체 생성해야함) Boxi..

Study Programming 2022.08.16

Databinding - ObservableField, BaseObservable

ObservableField (@Android/Databinding) : 객체를 observable(=관찰 가능)하게 만드는 wrapper 클래스. - Android의 Databinding의 소속으로 DataBinding을 활성화해야 사용 가능 java.lang.Object ↳ android.databinding.BaseObservable ↳ android.databinding.ObservableField - 사용 : ViewModel에서 로직이 변경 시 UI(의 작은 부분)가 자동 업데이트되도록 하기 위해 사용 - 사용법) ㄴ> 생성 : 아래와 같은 방법으로 생성가능 1) Observable Primitive타입클래스 ex) Observable(), ObservableInt() 2) Observable..

Blocking, Non-blocking, Sync, Async

Blocking vs NonBlocking : 딴 일하고 와도 돼? 차이점 : 호출된 함수가 바로 리턴(제어권 넘기)하느냐 마느냐 NonBlocking : 응 제어권 줄께, 너 딴 일하고 와 호출된 함수가 바로 리턴해 제어권을 넘겨서 호출한 함수는 자기 할 일 한다. Blocking : 안돼 끝날 때까지 넌 여기서 기다려 호출된 함수가 자신의 작업을 모두 마칠 때까지 호출한 함수에게 제어권을 넘겨주지 않고 호출한 함수가 다른 일 못하고 대기하게 한다. Synchronous vs Asynchronous : 작업완료를 어떻게 알래? 차이점 : 호출한 함수가 '호출된 함수의 완료 여부'를 신경쓰냐 Async (Asynchronous, 비동기, 비동기화) : 너가 끝나고 연락해! 호출된 함수에게 callback..

Study Programming 2022.08.15

reflection 이란?

Reflection(리플렉션, 반영)? : 컴퓨터 프로그램에서 런타임 시점에 사용되는 자신의 구조와 행위를 관리(type introspection)하고 수정할 수 있는 프로세스를 의미 - “type introspection”은 객체 지향 프로그램언어에서 런타임에 객체의 형(type)을 결정할 수 있는 능력을 의미한다. - 코틀린에서 :: 인자를 리플랙션하기 위해 자주 사용한다. Ex) 자바 클래스를 인자로 넘기기 위해 코틀린 클래스 레퍼런스는 '클래스명::class'으로 표현 자바 클래스 레퍼런스는 '클래스명:class.java'으로 표현 출처 https://ko.wikipedia.org/wiki/%EB%B0%98%EC%98%81_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED..

'화면 캡처 막기'와 getWindow().addFlagssetFlags(int flags, int mask)

'화면 캡처 막기' 설정 // (나같은 경우)acitivity onCreate()에서 getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); // 또는 getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); 위에서 사용하는 'getWindow().addFlagssetFlags(int flags, int mask)' - @param flags : 화면에 설정할 flag 값 - @param mask : (수정할 창 플래그 비트 라는데) 아래와 같은 역할을 하는듯 하다. 기본적으로 다른 값에 대한 비트 단위 필터입니다. 예를 들어..

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