안드로이드/Kotlin (28) 썸네일형 리스트형 [Kotlin] Introduction to Coroutines and Channel-1 개요 해당 개시글은 Welcome to Kotlin hands-on (kotlinlang.org)를 번역한 게시글입니다. Introduction 이번 핸즈 온 튜토리얼을 통해 코루틴의 개념에 친숙해질 것이다. 코루틴은 비동기 및 넌블러킹 처리 과정에서 이점이 있으며 가독성도 해치지 않는다. 네트워크 요청에서 블러킹, 콜백 없이 어떻게 코루틴을 사용해야 하는지 확인할 수 있을 것이다. 배울 내용은: 왜 그리고 어떻게 suspend function을 네트워크 요청에 사용하는가 어떻게 코루틴을 이용해서 동시 요청을 보내는가 어떻게 서로 다른 코루틴 사이에서 채널(channels)을 활용해서 정보를 공유하는가 또한 어떻게 코루틴이 다른 비동기 솔루션들과 다른 지 확인할 것이다. 네트워크 요청에는 코루틴을 서포팅.. [Kotlin] 코틀린 공식 문서 - Cancellation and Timeout 개요 해당 게시글은 Cancellation and timeouts | Kotlin (kotlinlang.org)을 번역한 게시글입니다. Cancelling coroutines execution 오랫동안 실행되는 앱에서는 백그라운드 코루틴에 대한 미세한 제어가 필요할 수도 있다. 예를 들어, 사용자가 코루틴이 실행된 페이지를 닫아서 더 이상 필요하지 않아 해당 작업을 취소할 수도 있다. launch 함수는 Job 객체를 반환하며 이를 통해 실행중인 코루틴을 취소시킬 수 있다. fun main() = runBlocking { val job = launch { repeat(1000) { i -> println("job: I'm sleeping $i ...") delay(500L) } } delay(1300L).. [Kotlin] 코틀린 공식 문서 - Coroutines basics 개요 해당 게시글은 Coroutines basics | Kotlin (kotlinlang.org)을 번역한 게시글입니다. Your first Coroutine 코루틴은 일시 중단 가능한 연산(suspendable computation)의 객체이다. 이는 다른 코드와 동시에 작동되는 코드 블록이 실행된다는 점에서 개념적으로 스레드와 유사하다. 그러나 코루틴은 특정 스레드에 바인딩되지 않는다. 한 스레드에서 실행을 일시 중지하고 다른 스레드에서 다시 시작할 수도 있다. 코루티는 경량 스레드로 생각될 수 있지만 스레드와 매우 다른 몇 가지 차이점이 있다. 아래는 첫번째 코루틴 코드이다. fun main() = runBlocking { // this: CoroutineScope launch { // launch.. [Kotlin] 코틀린 공식 문서 - Coroutines Guide, Asynchronous programming Techniques 개요 해당 포스트는 Coroutines guide | Kotlin (kotlinlang.org)를 번역한 게시글 입니다. Coroutines Guide 언어로서 코틀린은 표준 라이브러리에서 최소한의 저수준 API를 제공하여 여러 다른 라이브러리가 코루틴을 활용할 수 있도록 한다. 유사한 기능을 가진 다른 언어들과 달리 async/await은 Kotlin 만을 위한 키워드가 아니며 표준 라이브러리의 일부도 아니다. 또한, 코틀린의 suspending function이라는 개념은 futures/promises보다 비동기 작업에 대해 더 안전하고 오류 가능성이 적은 쉬운 추상화를 제공한다. Asynchronous programming Techniques 여러 해 동안 개발자들은 blocking으로 부터 앱을 .. [Kotlin] 스트림 함수(확장 함수) - 조합 및 합계, 기타 조합 및 합계 zip() 함수는 두 컬렉션 내의 자료를 조합하여 새로운 자료를 만들 때 사용한다. 두 컬렉션 간 자료의 개수는 달라도 문제 없으며, 다르다면 조합에 사용하는 컬렉션 중 더 적은 쪽을 따라간다. 기본적으로는 Pair의 형태로 자료를 조합하고, 원하는 경우 조합 규칙을 지정할 수 있다. val cityCodes = listOf("SEO", "TOK", "MTV", "NYC") val cityNames = listOf("Seoul", "Tokyo", "Mountain View") cityCode.zip(cityNames) .forEach{pair -> println("${pair.first}:${pair.second}") } //SEO:Seoul //TOK:Tokyo //MTV:Mountain.. [Kotlin] 스트림 함수(확장 함수) - map, filter 개요 자바 8에서는 리스트나 맵과 같은 컬렉션의 자료들을 손쉽게 다룰 수 있는 스트림(stream) 기능을 제공한다. 스트림은 컬렉션의 자료를 다른 타입으로 변경하거나, 새로운 자료를 추가로 생성하는 등의 작업을 쉽게 도와준다. 코틀린에서는 이와 유사한 기능을 확장 함수의 형태로 제공한다. 확장 함수는 내부적으로 자바의 스트림을 사용하지 않아 엄밀히 말하면 스트림 함수가 아니긴하다. 변환-map() map() 함수는 컬렉션 내 요소를 다른 값이나 타입으로 변경할 때 사용한다. val cities = listOf("Seoul", "Tokyo", "New york") //도시 이름을 대문자로 변환하여 저장 후 출력 cities.map{city -> city.toUpperCase()}. .forEach{ pr.. [Kotlin] 컬렉션(Collections) Kotlin Collections 코틀린 표준 라이브러리는 컬렉션을 관리하기 위한 기능을 제공한다. 코틀린의 컬렉션은 크게 가변 컬렉션인 mutable과 불변 컬렉션인 immutable로 나뉜다. 여기서 가변 컬렉션이라고 var를 사용하는 것은 아니다. var는 객체의 참조(주소)가 가변이라는 것이다. 컬렉션에서 가변, 불변은 요소(elements)를 추가/삽입/변경이 가능하는지를 의미한다. 종류 1. List 리스트는 순서가 있는 컬렉션이다. 자료구조에서 학습한 연결리스트와 같다. var list = listOf(100,101,102) var mlist = mutableListOf() mlist.add(100) mlist.add(101) ... 자매품으로 ArrayList도 존재한다. var list .. [Kotlin] 위임(Delegation)과 초기화 지연(lazy initialization) 읽기 전용 프로퍼티(Read-Only Property) 일반적으로 안드로이드 애플리케이션에서 대부분의 위젯 참조는 액티비티의 생명 주기와 동일하게 유지된다. 즉, 처음 할당된 참조를 바꿀 필요가 없어진다. 따라서, 이는 read-only인 val을 활용하면 된다. 하지만, val의 경우 선언과 동시에 값을 가져야 한다는 문제점이 생긴다. 아래와 같이 뷰를 참조해야될 경우 val을 통해 read-only로 참조하고 싶지만 뷰가 세팅 된 이후에 findViewById를 활용할 수 있기 때문에 불가능하다. class MainActivity : AppCompatAcitivity(){ val textView: TextView //에러 override fun onCreate(savedInstanceState: Bu.. 이전 1 2 3 4 다음