목록Tech/Kotlin & Coroutine (4)
지나공 : 지식을 나누는 공간
코틀린 인 액션을 통해 빠르게 코틀린을 손에 익히고 있다. 코드나 사용법은 손과 눈에 익히면 그만인데 그 외에 언어의 특징은 기록해두려고 한다. 자바와 마찬가지로 코틀린도 정적 타입 언어다. (statically typed) 정접 타입 언어란, 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 필드나 메서드를 사용할 때마다 컴파일러가 타입을 검증해준다는 뜻 동적 타입 언어에는, JVM의 경우 Groovy나 JRuby 등이 있는데 타입과 관계 없이 모든 값을 변수에 넣을 수 있고 메서드나 필드 접근에 대한 검증이 실행 시점에 일어나며, 그에 따라 코드가 더 짧아지고 데이터 구조를 더 유연하게 생성하고 사용할 수 있다. 그러나 이러한 동적 타입 언어는 이름을 잘못 입력하는 등의 실..
코루틴의 취소에 대해 알아본다. 코루틴의 취소를 알아야 리소스도 해제할테니 잘 알아두자! Canceling coroutine execution fun maini() = runBlocking { val job = luanch{ repeat(1000) { i -> println("job: I'm sleeping $i ...") delay(500L) } } delay(1300L) println("main : I'm tired of waiting!") job.cancel() job.join() println("main : Now, I can quit") } launch는 코루틴 job을 반환하는데 이 job은 취소하는 기능도 가지고 있다. 1000번을 반복하면서 0.5초 간격으로 숫자를 출력하고, 1.3초 지났..
코루틴을 정리하면 비동기 처리를 순차적으로 간단하게 하고, 콜백을 대체할 수 있는 도구다. 뭐가 편해지는 건지 한번 코드로 확인해보자. 코루틴, 뭐가 편해지는걸까? val user = fetchUserData() textView text = user.name 위처럼 코드를 짜면 참 편하다. 바로 서버를 호출하고, 그 결과를 바로 텍스트뷰에 삽입할 수 있으니까. 하지만 위처럼 할 수는 없다. 서버를 호출하는 부분은 네트워크 부분이기 때문에 NetworkOnMainThreadException이 발생하기 때문이다. 지난 포스팅에서 말했듯, 네트워크 작업은 main thread가 아니라 IO thread에서 작업하는 것이다. 근데 지금은 메인스레드에서 네트워크 콜을 하고 있네? 문제다. fetchUserData..
코루틴(Coroutine)? 실행의 지연과 재개를 허용함으로써, 비선점적 멀티태스킹을 위한 서브 루틴을 일반화한 컴퓨터 프로그램 구성요소. 이제 진하게 칠한 단어를 하나씩 공부해보자! 1. 루틴과 서브루틴? 프로그램은 보통 크고 작은 여러가지의 루틴을 조합시켜서 성립되는데 여기서 메인 루틴과 서브루틴으로 나뉜다. 메인 루틴 : 프로그램 전체의 개괄적인 동작 절차를 표시하도록 만들어진 루틴. 서브 루틴 : 반복적인 특정 기능을 모아서 별도로 묶인 루틴. 서브 루틴은 별도의 메모리에 해당 기능을 모아 놓고 서브루틴이 호출될 때마다 저장된 메모리에 이동한 뒤 다시 return을 통해 원래 호출자의 위치로 돌아온다. 서브루틴은 함수와 비슷하다. 코루틴도 루틴의 일종인데, 3가지 차이점이 존재한다. 메인 - 서브..