본문 바로가기

컴퓨터 언어9

코틀린 - const val vs val 주의 아래 내용들은 오류나 잘못된 내용들을 포함할 수 있으므로 주의해주시기 바랍니다. 만약, 잘못 된 부분이 있으면 댓글로 말씀해주시면 감사하겠습니다. 읽기만 가능한, 수정이 불가능한 변수를 선언할 때는 val 키워드를 사용한다. 그런데 일반적으로 const 또한 수정이 불가능한 변수를 선언할 때 사용하지 않나? 이 둘의 차이점은 무엇일까? 바로 초기화 시기에 차이점이 있다. const val의 경우 컴파일 타임에 초기화가 되고, val의 경우 런타임 시기에 초기화가 된다. 이는 const val이 참조형을 사용하지 못하는 이유와도 연관이 있다. 참조형은 프로그램이 돌아갈 때, 프로그램에 의해서 힙 메모리에 객체가 올라가고 스택 메모리에 선언된 변수가 해당 객체를 참조한다. const val은 컴파일 시.. 2022. 9. 30.
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.. 2022. 7. 6.
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.. 2022. 7. 5.
05. 코루틴의 runBlocking runBlocking은 자신이 호출 되는 스레드를 정지하고 새로운 코루틴을 만들어 실행한다. 때문에 UI에서 실행할 경우, UI 스레드를 정지하여 ANRS(Application Not Responding) 에러가 발생할 수 있다. 2022.09.03 추가) 또한, runBlocking은 내부에 코루틴이 모두 종료될 때까지 계속 스레드를 정지합니다. runBlocking은 주로 어디에 사용되나? 1. suspend 함수를 부르고 싶은데 딱히 코루틴 작업(동시성)이 필요 없을 때. 2. junit으로 테스트할 때, test함수에서 suspend 함수를 실행하기 위해 3. 프로그램에 흐름을 보고 싶을 때. 여러 블로그를 찾아 보면서 느낀 건데 runBlocking과 GlobalScope는 웬만하면 사용하지 말.. 2022. 7. 5.
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.. 2022. 7. 5.
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.. 2022. 7. 5.