Programming Language/Kotlin19 [Kotlin] Coroutine 기본 개념 Android & Main Thread안드로이드의 View는 메인 스레드에서 업데이트가 된다. 그 이유는 서로 다른 스레드에서 View를 동시에 업데이트하면 문제가 발생할 수 있기 때문이다.안드로이드는 프레임 렌더링을 위해서 60fps(1초에 60 프레임 렌더링), 16ms(하나의 프레임을 렌더링 하는 데 걸리는 시간)에 달성해야 한다고 한다. 이 이하로 떨어지게 되면 시각적으로 봤을 때, 버벅거림이 발생하고 사용자에게 안 좋은 경험을 제공할 수 있기 때문이다. 스레드는 한 번에 하나의 일을 처리할 수 있다. 메인 스레드는 View 업데이트에 사용되어야 한다. 만약 View 업데이트가 아닌 다른 작업이 많아지거나 오래 걸린다면 메인스레드가 View 업데이트를 하지 못하게 된다. 결과적으로 View 업데.. 2025. 5. 29. [Kotlin] Dive into Concept of Kotlin Coroutine Context. Dispatchers, Job and Deferred. 소개 Dispatchers Android Dispatchers Dispatchers.Default Dispatchers.IO Dispatchers.IO & Dispatchers.Default Job Deferred Job States 소개 CoroutineContext는 코루틴 실행을 어떻게 할 것인지에 대한 요소들을 결정한다. Coroutine은 항상 Kotlin 표준 라이브러리에 정의된 CoroutineContext 타입의 값으로 표시되는 일부 Context에서 실행된다. CoroutineContext는 다양한 요소의 집합이다. 주요 요소는 Job, Dispathcer, ExceptionHandler 등이 있다. 이러한 요소들은 각각의 키 값을 갖고 있으며, CoroutineContext로 등록된다... 2023. 7. 1. [Kotlin] Dive into Concept of Kotlin Coroutine and CoroutineContext. (suspend keyword) 소개 CoroutineScope CoroutineContext CoroutineBuilder suspend keyword 예제 Structured concurrency Coroutine continuation 소개 코루틴은 일시 중단이 가능한 계산의 인스턴스이다. 안드로이드의 UI 스레드 실행을 중단시키지 않고 다른 스레드에서 계산을 실행할 수 있다는 점에서 개념적으로 스레드와 유사하다. 그러나 코루틴은 특정 스레드에 바인딩되지 않고, 한 스레드에서 실행을 일시 중단하고 다른 스레드에서 다시 시작할 수 있다. 말이 어려울 수 있다. 중요한 점은 코루틴은 일시 중단이 가능하다는 것이다. Coroutine을 구성하는 요소로 CoroutineScope, CoroutineContext, CoroutineBuil.. 2023. 7. 1. [Kotlin] Compare two formatted Date Strings 목차 Import Library 날짜 데이터 생성 날짜 비교 예제 결과 결론 Import Library import java.text.SimpleDateFormat import java.time.Duration import java.time.LocalDateTime import java.util.* 날짜 데이터 생성 // 현재 시간 가져오기 val format = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.getDefault()) val date = try { val millis = Calendar.getInstance(TimeZone.getTimeZone("UTC")).timeInMillis format.format(Date(millis)) } cat.. 2023. 6. 3. [Kotlin] Abstract class 소개abstract class는 template class 처럼 사용할 수 있다. 하나의 설계도 혹은 청사진으로써 그 역할을 한다. 독립적으로는 어떠한 행동을 할 수 없으며 다른 class와의 관계를 통해서 그 역할을 한다. abstract class 안에 멤버는 하나 이상 abstract로 선언될 수 있으며, 선언된 멤버는 구현체를 갖지 않는다. 또한, abstract로 선언되었다면 open 키워드를 사용할 필요가 없다. abstract 로 선언된 멤버는 반드시 abstract class를 상속 받고 있는 클래스 내에서 구현되어야 하기 때문이다.abstract class Rectangle() { val vertex = 4 // 꼭지점의 개수. 불변. 확정. abstract val width: Int /.. 2023. 2. 28. [Kotlin] Sealed Class 소개상수로 정의한 특정 값들을 enum class로 정의하여 사용할 수 있다. 그렇게 하면 엉뚱한 값이 할당되는 상황을 방지할 수 있어 개발자의 실수를 줄일 수 있다. 이런 enum class의 한계는 내부적으로 각 enum constant는 하나의 single instance를 갖기 때문에 서로 다른 객체를 가질 수 없다는 것이다. 또한, Kotlin에서 자주 사용하는 when 문을 사용할 때, enum value가 누락되었어도 어떤 오류 메시지를 발생시키지 않는다. 반면에, sealed class를 사용하여 구현하였을 경우 when 문 안에서 누락된 값을 캐치할 수 있다. 설명sealed class와 interface는 상속에 대한 더 많은 제어를 제공하는 제한된 클래스 계층을 나타낸다.sealed .. 2023. 2. 19. [Kotlin] Interfaces 설명코틀린 인터페이스는 추상 멤버와 구현체를 모두 포함할 수 있다.abstract와의 차이점은 인터페이스 안에 상태를 저장할 수 없다.properties는 가질 수 있지만 abstract이거나 접근 구현체(accessor implementations)를 제공해야 한다.interface MyInterface { fun bar() fun foo() { // optional body } } Properties in interfaces인터페이스 안에 properties를 선언할 수 있다.인터페이스 안에 선언된 property는 backing field를 가질 수 없다.interface MyInterface { val prop: Int // abstract val propertyWithImplementation:.. 2023. 2. 12. [Koltin] Object Keyword. (싱글톤 패턴, 익명 함수) 경우에 따라 새 하위 클래스를 명시적으로 선언하지 않고 일부 클래스를 약간 수정한 개체를 만들어야 한다. 코틀린은 객체 표현식과 객체 선언으로 이를 처리할 수 있다. Object expressions 객체 표현식은 익명 클래스, 즉 클래스가 명시적으로 선언되지 않은 클래스의 객체를 만든다. 이러한 클래스는 일회용으로 사용하기 유용하다. 처음부터 정의하거나 기존 클래스에서 상속하거나 인터페이스를 구현할 수 있다. 익명 클래스의 인스턴스는 이름이 아닌 식에 의해 정의되므로 익명 객체라고도 한다. Creating anonymous objects from scratch 객체 표현식은 object 키워드를 사용한다. val helloWorld = object { val hello = "Hello" val worl.. 2023. 2. 8. [Kotlin] forEach에서 break & continue 1. continuereturn@forEach를 하면 break가 될 것 같지만 continue로 동작한다.이름을 짓는 방법도 있다. 마찬가지로 continue로써 동작한다. 2. breakrun 함수로 감싼 후 return@run 으로 run에서 나온다면 break로써 동작한다.continue와 마찬가지로 이름을 지어줄 수 있다. 2022. 12. 5. 이전 1 2 3 다음 반응형