본문 바로가기

컴퓨터 언어

(10)
코틀린 - const val vs val 주의 아래 내용들은 오류나 잘못된 내용들을 포함할 수 있으므로 주의해주시기 바랍니다. 만약, 잘못 된 부분이 있으면 댓글로 말씀해주시면 감사하겠습니다. 읽기만 가능한, 수정이 불가능한 변수를 선언할 때는 val 키워드를 사용한다. 그런데 일반적으로 const 또한 수정이 불가능한 변수를 선언할 때 사용하지 않나? 이 둘의 차이점은 무엇일까? 바로 초기화 시기에 차이점이 있다. const val의 경우 컴파일 타임에 초기화가 되고, val의 경우 런타임 시기에 초기화가 된다. 이는 const val이 참조형을 사용하지 못하는 이유와도 연관이 있다. 참조형은 프로그램이 돌아갈 때, 프로그램에 의해서 힙 메모리에 객체가 올라가고 스택 메모리에 선언된 변수가 해당 객체를 참조한다. const val은 컴파일 시..
07. 코루틴의 Async and Await 코루틴을 launch로 실행하면 함수가 차례대로 동기적으로 실행됩니다. 그러나 네트워크 작업과 같이 오래 걸리는 작업은 결과를 받기 전에 다른 작업을 실행하고 싶을 때가 있습니다. 이럴 때 우리는 비동기화로 실행을 하는데 코루틴에선 이를 async와 await를 사용하여 구현합니다. [launch를 썼을 때] package com.goodee.test import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import androidx.databinding.DataBindingUtil import com.goodee.test.databinding.ActivityMainBinding impo..
06. 코루틴의 Job, waiting, Cancelation Job은 코루틴의 상태를 가지고 있습니다. 코루틴을 실행하면 Job 객체를 반환합니다. 이 Job 객체를 가지고 코루틴 작업을 취소하거나 끝나는 것을 기다리는 등 여러 가지 작업을 할 수 있습니다. [job의 cancel 메소드를 사용하여 코루틴을 정지해보기] package com.goodee.test import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import androidx.databinding.DataBindingUtil import com.goodee.test.databinding.ActivityMainBinding import kotlinx.coroutines.* clas..
05. 코루틴의 runBlocking runBlocking은 자신이 호출 되는 스레드를 정지하고 새로운 코루틴을 만들어 실행한다. 때문에 UI에서 실행할 경우, UI 스레드를 정지하여 ANRS(Application Not Responding) 에러가 발생할 수 있다. 2022.09.03 추가) 또한, runBlocking은 내부에 코루틴이 모두 종료될 때까지 계속 스레드를 정지합니다. runBlocking은 주로 어디에 사용되나? 1. suspend 함수를 부르고 싶은데 딱히 코루틴 작업(동시성)이 필요 없을 때. 2. junit으로 테스트할 때, test함수에서 suspend 함수를 실행하기 위해 3. 프로그램에 흐름을 보고 싶을 때. 여러 블로그를 찾아 보면서 느낀 건데 runBlocking과 GlobalScope는 웬만하면 사용하지 말..
04. 코루틴의 Context 코루틴은 항상 특정한 Context에서 시작합니다. Context는 코루틴이 어떤 스레드에서 시작할지 명시하는 역할을 합니다. Dispatchers.Main = UI작업 Dispatchers.IO = 네트워킹이나 데이터베이스 처리 Dispatchers.Default = 긴 시간동안 연산이 필요한 작업 Dispatchers.Unconfined = 말 그대로 별도로 스레드를 지정 안해주는 것. 코루틴이 시작 된 스레드에서 작업을 계속 한다. package com.goodee.test import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.databinding.DataBindingUtil import com..
03. 코루틴 suspend 함수 suspend 함수는 코루틴 내에서 불리거나 혹은 같은 suspend 함수 내에서만 호출 될 수 있습니다. package com.goodee.test import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import androidx.databinding.DataBindingUtil import com.goodee.test.databinding.ActivityMainBinding import kotlinx.coroutines.* class MainActivity : AppCompatActivity() { private val TAG: String = "로그" private lateinit..
02. 코루틴 첫 시작 코루틴은 항상 코루틴 스코프(Coroutine Scope) 내에서 돌아가야 합니다. 이번 예제에서는 Global Scope에서 코루틴을 실행할 것입니다. Global Scope 내에서 실행된 코루틴의 라이프사이클은 프로그램의 라이프사이클과 함께 합니다.(프로그램이 종료되면 코루틴이 종료됩니다.) import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch fun main() { // 코루틴은 항상 코루틴 스코프(Coroutine Scope) 내에서 돌아가야 한다. // Global Scope에서 실행된 코루틴은 프로그램이 실행되는동안 계속 살아 있다. val startTime = S..
01. 코루틴이란 무엇인가? 코루틴이란 무엇인가? 코루틴을 흔히 코틀린 고유의 구성요소라고 생각하는 경우가 있는데, 사실 코루틴은 서브루틴을 일시정지하고 재개할 수 있는 구성요소를 말합니다. 서브루틴은 간단하게 코틀린과 자바에 메서드나 함수로 이해하면 됩니다. 또한, 코틀린뿐만 아니라 파이썬, 자바스크립트 등 다양한 언어에서 코루틴을 지원하고 있습니다. 코루틴의 사용처 안드로이드의 경우 메인스레드에서 UI를 관리합니다. 그런데, 만약 메인 스레드에서 네트워크 요청이나 데이터베이스 검색 등 시간이 오래 걸리는 작업을 실행하면 어떻게 될까요? 메인스레드는 다른 작업을 처리하지 못하고 사실상 멈춰있는 것처럼 보이게 됩니다. 이를 해결하기 위해서 필요한 것이 동시성 프로그래밍이고 이를 위해 사용 되는 것이 코루틴입니다. 코루틴과 스레드의 ..