본문 바로가기

Language/Kotlin

(14)
코틀린[Kotlin] 기본 문법 2 (클래스, 제너릭, 상속) 코틀린 기본 문법 1편에 이어 이번엔 객체지향 프로그래밍의 기본인 클래스, 제너릭, 상속을 코틀린에서 어떻게 사용하는지 알아보겠습니다. 코틀린 공식 문서를 참고했습니다. 클래스 (Classes) 클래스 선언은 클래스 이름, 클래스 헤더(유형 매개변수 지정, 기본 생성자 등) 및 클래스 본문으로 구성되며 중괄호로 둘러싸여 있습니다. 헤더와 본문은 모두 선택 사항입니다. 클래스에 본문이 없으면 중괄호를 생략할 수 있습니다. class Customer // 1 class Contact(val id: Int, var email: String) // 2 fun main() { val customer = Customer() // 3 val contact = Contact(1, "mary@gmail.com") // ..
코틀린[Kotlin] 기본 문법 1 (함수, 변수, 널 안전성) 아래 코틀린 코드는 play.kotlinlang.org에서 실행할 수 있습니다. 코틀린 공식 문서를 참고해 작성되었습다. Hello world package org.example.ki // 1 fun main() { // 2 println("Hello, World!") // 3 } Kotlin 코드는 일반적으로 패키지에 정의됩니다. 패키지를 명시하는 것은 선택 사항입니다. 소스 파일에 패키지를 지정하지 않으면 해당 내용이 기본(default) 패키지로 이동합니다. Kotlin 애플리케이션의 진입점은 메인 함수입니다. Kotlin 1.3부터 ​​매개변수 없이 main을 선언할 수 있습니다. println은 표준 출력에 한 줄을 씁니다. println은 암시적으로 import됩니다. 또한 세미콜론을 표기하는..
Coroutine을 사용한 동시성 프로그래밍과 async, await 코틀린 코루틴을 사용해 동시성을 구현하는 방법에 대해서 다루겠습니다. 핵심은 async builder를 사용해 작업을 실행하고, await를 사용해서 async에서 작업이 끝날 때까지 기다리고 결과물을 가져오는 것입니다. 예를 들어 동시성이 아닌 순차적으로 프로그래밍이 진행된다고 생각해보자 A 작업이 완료되는 시간 ⇒ 10초 B 작업이 완료되는 시간 ⇒ 8초 A, B 순차적으로 실행하면 총 18초가 걸립니다. 하지만 A, B 작업을 평행하게 작업하면 10초가 걸립니다. A, B 각각 평행하게 작업하고 그 결과 값들을 결합하는 작업을 할 것입니다. 작업은 다음과 같이 2가지가 있습니다. 하나는 10초, 다른 하나는 8초가 걸립니다. 먼저 두 작업을 순차적으로 진행하고, 동시적으로 작업하도록 해보겠습니다. ..
Kotlin Coroutine Thread 변경하기, Coroutine Suspending Functions (중단 함수) 먼저 Coroutine이 작동하는 Thread를 변경하는 것에 대해서 다루겠습니다. 문제 상황 이전 Hello Couroutine! 에서는 코루틴을 사용해 백그라운드 스레드에서 로그를 남기도록 했습니다. 하지만 UI를 수정하는 작업을 백그라운드 스레드에서는 할 수 없어 UI 관련 작업은 할 수 없었습니다. class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) btnDownloadUserData.setOnClickListener { // 버튼 클릭시 백그라운드..
Kotlin Coroutine Scope, Context, Dispacher에 대해서 한 스레드, 프로세스에서 동시에 수백 개의 코루틴을 실행할 수 있습니다. 하지만 기본적으로 코루틴들의 작업이 끝났는지 추적하지 않아 메모리 누수가 발생할 수 있습니다. 코틀린은 이 문제를 코루틴을 Scope안에서 실행하는 것으로 해결할 수 있습니다. 다음과 같은 코루틴 실행 예시를 통해서 Coroutine Scope, Context, Dispacher를 알아보겠습니다. CoroutineScope(Dispatchers.IO).launch { // 코루틴이 실행할 작업 } Coroutine Scope 코루틴의 scope를 정의하는 인터페이스입니다. 또 다른 인터페이스는 GlobalScope가 있습니다. GlobalScope은 top-level 코루틴을(앱이 전체에서 작동한다.) 실행하기 위해서 사용됩니다. ..
Kotlin Coroutine 소개 및 Hello Coroutine! 코루틴은 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴입니다. 코루틴은 Kotlin 버전 1.3에 추가되었으며 다른 언어에서 확립된 개념을 기반으로 합니다. Android에서 코루틴은 기본 스레드를 차단하여 앱이 응답하지 않게 만들 수도 있는 장기 실행 작업을 관리하는 데 도움이 됩니다. 기능 코루틴은 Android의 비동기 프로그래밍에 권장되는 솔루션입니다. 주목할 만한 기능은 다음과 같습니다. 경량(LightWeight): 코루틴을 실행 중인 스레드를 차단하지(block) 않는 정지(suspension)를 지원하므로 단일 스레드에서 많은 코루틴을 실행할 수 있습니다. 정지(suspension)는 많은 동시 작업(concurrunt operation..