반응형

Programming Language/Kotlin 18

[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로 등록된다...

[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..

[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..

[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 /..

[Kotlin] Sealed Class

소개상수로 정의한 특정 값들을 enum class로 정의하여 사용할 수 있다. 그렇게 하면 엉뚱한 값이 할당되는 상황을 방지할 수 있어 개발자의 실수를 줄일 수 있다. 이런 enum class의 한계는 내부적으로 각 enum constant는 하나의 single instance를 갖기 때문에 서로 다른 객체를 가질 수 없다는 것이다. 또한, Kotlin에서 자주 사용하는 when 문을 사용할 때, enum value가 누락되었어도 어떤 오류 메시지를 발생시키지 않는다. 반면에, sealed class를 사용하여 구현하였을 경우 when 문 안에서 누락된 값을 캐치할 수 있다. 설명sealed class와 interface는 상속에 대한 더 많은 제어를 제공하는 제한된 클래스 계층을 나타낸다.sealed ..

[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:..

[Koltin] Object Keyword. (싱글톤 패턴, 익명 함수)

경우에 따라 새 하위 클래스를 명시적으로 선언하지 않고 일부 클래스를 약간 수정한 개체를 만들어야 한다. 코틀린은 객체 표현식과 객체 선언으로 이를 처리할 수 있다. Object expressions 객체 표현식은 익명 클래스, 즉 클래스가 명시적으로 선언되지 않은 클래스의 객체를 만든다. 이러한 클래스는 일회용으로 사용하기 유용하다. 처음부터 정의하거나 기존 클래스에서 상속하거나 인터페이스를 구현할 수 있다. 익명 클래스의 인스턴스는 이름이 아닌 식에 의해 정의되므로 익명 객체라고도 한다. Creating anonymous objects from scratch 객체 표현식은 object 키워드를 사용한다. val helloWorld = object { val hello = "Hello" val worl..

[Kotlin] 진수 변환. 알고리즘.

안녕하세요 골드입니다. 오늘은 코틀린에서 진법 변환에 대해서 글을 쓰도록 하겠습니다. 1. N진수 -> 10진수 2진수, 8진수, 16진수로 표현된 "1111"을 10진수로 변경하는 코드입니다. 코틀린은 함수 라이브러리가 다양하게 잘 만들어져 있습니다. toInt()에 N을 입력하면 "1111"은 N진수로써 표현되고 이를 toInt() 10진수로 변경하는 함수입니다. 만약 변환하는 데에 올바르지 않은 값을 입력하였다면 NumberFormatException이 나타나게 됩니다. 1111(2) -> 15(10) 1111(8) -> 585(10) 1111(16) -> 4369(10) 수학적으로 계산하는 방법은 이렇습니다. 앞서 4비트 "1111"로 예제를 만들었기 때문에 n의 제곱수에 곱해지는 것은 모두 1이..

[Kotlin] 비동기 프로그래밍 기술

안녕하세요 골드입니다. 비동기 프로그래밍은 더 이상 선택이 아닌 필수임에 따라 프로세스 블록에 대한 해법은 꽤 오래 연구되어 왔습니다. 코틀린 공식 문서를 참고하여 그 다양한 기술 해법에 대해서 간략하게 이야기하고자 합니다. https://kotlinlang.org/docs/async-programming.html#threading Asynchronous programming techniques | Kotlin kotlinlang.org 스레드 콜백 미래시 리액티브 프로그래밍 코루틴 스레드 가장 잘 알려진 방법입니다. 시간이 오래 걸리는 작업은 ui에 영향을 미칠 수 있습니다. 애플리케이션에 경우 최악은 ANR이 발생하여 앱이 멈출 수 있다는 것입니다. 이러한 경우 분리된 스레드에서 작업을 할 수 있습니..