분류 전체보기 (93) 썸네일형 리스트형 Looper와 Handler Java 또는 Kotlin에서 코딩을 할 때, 메인 함수에서 실행하며 모든 실행을 마치면 작업이 종료된다.다른 말로 표현하면 메인 스레드 내의 작업이 완료되면 해당 프로세스는 종료된다는 뜻과 같다. 그러나 안드로이드 앱은 일반적으로 사용자가 스스로 종료하지 않는 이상 앱이 스스로 종료되지 않는다.즉, 메인 스레드 내의 작업이 종료되지 않고 계속 실행 중임을 알 수 있는데, 그 원인은 메인 스레드 내에서 Looper가 동작 중이기 때문이다. LooperLooper는 안드로이드 내에서 UI 스레드인 MainThread 내에서 동작한다. 덕분에 안드로이드는 스스로 종료되지 않고 실행 중인 상태를 유지할 수 있다. public final class Looper { public static void loop.. Flow 중간 연산자 흐름 제어1. debouncedebound 연산자는 데이터 발행 후 설정한 ms 내에 추가적인 데이터가 발행되는 경우, 기존의 데이터는 무시되고 새로 발행된 데이터를 기준으로 다시 ms를 측정하여 추가 데이터가 발행되지 않는 경우 해당 데이터를 수집한다.데이터 1번 발행 후 250ms 내에 데이터 2번 발행1번 데이터는 무시, 2번 데이터 발행 후 250ms 내에 3번 데이터 발행2번 데이터 또한 무시3번 데이터 발행 이후 250ms 내에 추가적인 데이터 발행이 없었으므로 3번 데이터 수집 2. samplesample 연산자는 설정 시간 간격 내에서 발행 데이터의 최신 값을 수집한다.변환 1. filterfilter 조건에 부합하는 데이터만 추출한다.val flowData: Flow = flow { .. Flow Builder 1. flow내부에서 emit을 통해 동적 데이터를 발행할 수 있다.fun flowBuilder() = flow { var number = 0 while(true){ delay(1000) emit(number++) }}2. asFlowList와 같은 데이터 컬렉션을 Flow로 변환해준다.val list = listOf(1,2,3,4,5)val flow: Flow = list.asFlow() 3. flowOf정적인 Flow 데이터 흐름을 생성할 수 있다.val flow: Flow = flowOf(1,2,3,4,5) Coroutine Flow Flow는 데이터 스트림의 일종으로 Coroutine 기반으로 데이터를 수집하는 기능이다. Producer: Flow Builder를 통해 데이터를 생산Intermediary: 생산 된 데이터를 중간에서 가공하는 역할 (선택)Consumer: 데이터가 넘어올 때마다 수집Flow의 특징1. Flow는 데이터 요청 시점부터 발행 시작fun main() { val scope = CoroutineScope(Dispatchers.IO) val flow = flow { var number = 0 while (true) { delay(1000L) emit(number++) } } scope.launch { .. Channel 채널은 코루틴에서 지원하는 데이터 스트림 구조를 갖고 있는 일종의 자료구조이다.val cahnnel = Channel() 채널에서는 데이터를 전송 및 수신 할 수 있다.channel.send(data)val receiveData = channel.receive() 이렇게만 보면 Queue와 다른점을 찾기 어려워보이지만 채널의 큰 특징에는 일시정지(Suspend)가 있다. Suspendval channel = Channel()CoroutineScope(Dispatchers.IO).launch { for(i in 1..5){ channel.send(i) println("$i send!") } println("send Done!") channel.close()}r.. JSON Converter Library JSON이란?JavaScript 객체 문법으로 구조화 된 데이터 교환 형식{ "name": "홍길동", "age": 20} 직렬화 & 역직렬화직렬화 : 외부의 시스템에서도 사용할 수 있도록 바이트 형태로 데이터를 변환하는 기술역직렬화: 바이트 형태의 데이터를 객체로 변환하는 기술 서버에서 데이터를 받을 때 혹은 유저가 서버에 데이터를 보낼 때 주로 JSON형식으로 데이터를 변환하여 서로 주고 받는다.사용자가 데이터를 전송할 때 해당 데이터를 JSON으로 변환하여 보내줄 필요가 있는데 이를 직렬화(Serialization)라고 하며, 반대로 JSON으로 넘어온 데이터를 그대로 사용하기 어려우니 JSON형식의 데이터를 나의 환경에 맞는 데이터 형식으로 바꿔주는 것을 역직렬화(DeSerializat.. Retrofit Retrofit은 OkHttp 기반의 라이브러리로 OkHttp보다 간편하게 사용할 수 있고, 가독성 높은 구조로 네트워크 통신을 가능하게 해준다. 특징API 인터페이스 : 요청과 응답을 인터페이스로 쉽게 구현할 수 있다.어노테이션 : HTTP Method와 Header 등 다양한 작업을 어노테이션으로 정의할 수 있다.비동기 처리 : Call 객체 및 Coroutine, RxJava와 같이 비동기 처리 가능직렬화/역직렬화 : Converter Factory 등록으로 데이터를 JSON으로 직렬화 및 역직렬화를 손쉽게 변환할 수 있다.OkHttp Interceptor 추가 작업 다른 HTTP 라이브러리에 비해 속도가 빠르다. 1️⃣ Retrofit Builderclass RetrofitManager { .. OkHttp HTTP 클라이언트 라이브러리로, HTTP 요청, 응답, 캐싱, 커넥션 풀과 같은 저수준 작업을 처리한다. OkHttp는 Android 5.0 (API 21) 이상 및 JAVA 8 이상에서 동작하며, Okio와 Kotlin 표준 라이브러리를 사용한다. 특징HTTP/2의 경우 동일한 호스트에 대한 모든 요청이 동일한 소켓을 공유할 수 있다.Connection Pooling: 요청마다 새로 연결하지 않고 Connection Pool 기능을 이용하여 동일한 URL의 연결을 Pooling하여 재사용한다. (HTTP/2가 아닌 경우)Transparent GZIP: 응답 데이터를 압축하여 네트워크 트래픽을 줄여준다.서버에 압축된 콘텐츠를 허용한다는 Accept-Encoding: gzip 를 헤더에 담아보내면 서버에.. HttpUrlConnection Http 네트워크 통신의 가장 기본이 되는 HttpUrlConnection은 Java에서 제공하는 클래스로, HTTP 통신에 필요한 메서드들을 제공한다. 네트워크 작업할 땐 Retrofit, Okhttp 등을 사용하기 때문에 직접적으로 HttpUrlConnection을 사용할 일은 매우 적겠지만 어떻게 사용하는지 간단하게 알아보자. 1. URL 연결val url = URI(URL).toURL()val httpUrlConnection = url.openConnection() as HttpURLConnectionhttpUrlConnection.apply { connectTimeout = 5000 requestMethod = "GET" doInput = true}URL.openConnectio.. [Kotlin] Scope Function kotlin Scope Function에는 apply, also, with, run, let 총 5가지의 Function이 있다. 자기 자신의 객체를 반환하는 함수1. applyinline fun T.apply(block: T.() -> Unit): Tapply는 객체의 프로퍼티(속성)을 정의할 때 사용한다. val product: Product = Product().apply { // this id = 1 name = "컴퓨터" price = 1000000 category = Category.ELECTRONICS}data class Product( var id: Int = 0, var name: String = "", var price: Int = 0, va.. 이전 1 2 3 4 5 ··· 10 다음