KOTLIN 23

[KOTLIN] CONTEXT / DISPATCHER

코루틴은 항상 Kotlin 표준 라이브러리에 정의된 CoroutineContext로 대표되는 어떤 context에서 실행되고 코루틴의 context는 여러 요소의 set으로 구성됨 Context 어떤 쓰레드에서 코루틴을 실행할지에 대한 Dispatcher의 정보를 담고 있는 그룹임, 스레드 풀을 전환하고, 지정하고, 예외를 잡는데 사용 Job, Deferred, Dispatcher, CoroutineName, CoroutineExceptionHandler는 모두 CorountineContext 인터페이스에 간접적으로 상속됨 Dispatcher 코루틴을 생성하여 해당 코루틴을 Dispatcher에 전송시, Dispatcher는 자신이 관리하는 스레드풀 내의 스레드 부하 상황에 맞춰서 코루틴을 분배함 결론적..

KOTLIN 2022.06.15

[KOTLIN] CANCELLATION (취소)

Cancellation fun main() = runBlocking { // 시작 val job = launch { repeat(1000) { i -> println("job: I'm sleeping $i ...") delay(500L) } } delay(1300L) // 약간 딜레이 println("main: I'm tired of waiting!") job.cancel() // job 취소 job.join() // job의 완료를 기다림. println("main: Now I can quit.") // 끝 } 코루틴을 사용할 경우 더이상 코루틴 동작이 필요하지 않은 경우 취소를 해줘야함 (자원 낭비가 발생) main()에서 job.cancel을 호출하면 다른 코루틴이 취소 되기 때문에 출력 금지됨 C..

KOTLIN 2022.06.09

[KOTLIN] SUSPEND 함수

Suspend 비동기 실행을 위한 중단 지점 잠시 중단하고, 언젠가 다시 시작 즉 일시중단이 가능하도록 하게 하는 키워드 코루틴 Suspend 함수는 구성 및 접근법이 다양함 순차적 실행 fun main() = runBlocking { val time = measureTimeMillis { val one = doOne(); val two = doTwo(); println("결과 : ${one + two}") } println("완료 ${time}") } suspend fun doOne(): Int { println("첫번째 함수 시작") delay(1000L) return 1; } suspend fun doTwo(): Int { println("두번째 함수 시작") delay(1000L) return 2..

KOTLIN 2022.06.06

[KOTLIN] 코루틴

Coroutines 비선점 멀티태스킹의 서브루틴 형태 (메인과 서브의 개념이 없다고함) 지연과 재개가 가능함 협력형 태스크와 비슷하게 동작 코루틴을 사용해서 특정 루틴의 블로킹을 분리하고 비동기적으로 협력형 멀티태스크를 구현 Kotlin Coroutines 기본옵션은 협력형이며 병행형으로 동작하지 않음 (옵션은 조절이 가능함) 스케쥴러 실행시점을 설정하는 것이 아닌 프로그래머 이벤트에 의해 실행 및 지연(Suspend), 재개(Resume) 시점이 결정 비선점형 태스크, 동시성 제공 Coroutines 요소 CoroutineScope : 코루틴문맥을 실행하기 위한 제한 범위를 지정, 특정한 목적의 Dispatcher를 지정하여 제어 및 동작 가능한 범위 CoroutineContext : 코루틴을 실행하는..

KOTLIN 2022.06.01

[KOTLIN] NULL SAFTY / NULL 처리방법

Kotlin의 타입시스템은 null references 위험을 제거하는 것을 목표로 함 Safe Call 연산자 fun main() { val name : String? = null val len = name?.length val upperName = name?.uppercase() println("${upperName}이고 이름자리는 ${len}자리입니다.") } ?.로 표현되며 nullable한 변수를 검사하여 null일 경우 NullPointException을 발생시키지 않고 그대로 null을 반환함 엘비스 연산자 fun main() { val name : String? = null val len = name?.length?:0 val upperName = name?.uppercase()?:"no ..

KOTLIN 2022.05.30

[KOTLIN] LATEINIT / LAZY

LateInit 변수에 객체를 할당하는 것을 선언과 동시에 하지 않고 할당하는 작업을 뒤로 미루게 해줌 Nullabled 하지 않는 변수를 선언하면서 할당하는 작업을 뒤로 미루고 싶을 때 사용 LateInit은 mutable 변수만 가능하기 때문에 var키워드 가진 변수에만 사용이 가능함 LateInit 예제 fun main() { val lateInit = LateInitSample() println(lateInit.getLateInitText()) lateInit.text = "할당완료" println(lateInit.getLateInitText()) } class LateInitSample { lateinit var text: String fun getLateInitText(): String { /..

KOTLIN 2022.05.22

[KOTLIN] 시퀀스 (SEQUENCES)

시퀀스 (Sequences) Collections과 같은 Iterable한 자료구조임 Collections와 연산방식에 차이점이 있음 Collections은 기본적으로 Eager evaluation이고, Sequences은 Lazy evaluation임 Lazy evaluation / Eager evaluation 종류 방식 Kotlin Collections Eager evaluation Kotline Sequences Lazy evaluation Java Streams Lazy evaluation Lazy evaluation : 지금 하지 않아도 되는 연산을 최대한 미루고, 필요한 순간에 연산을 수행하는 방식 Eager evalutation : 수행해야 할 연산이 있으면 미루지 않고 바로 처리하는 방식..

KOTLIN 2022.05.22

[KOTLIN] 확장함수

확장함수 클래스에 상속하거나 디자인 패턴을 사용하지 않고 새로운 기능으로 클래스를 확장 할 수 있는 기능을 제공하게 해줌 마치 기존 클래스의 멤버 함수인 것처럼 사용할 수 있게 해주는 함수 확장함수 구조 fun 클래스이름.함수이름(인자타입): 리턴타입 { 구현부 } 클래스이름은 확장이 정의될 클래스를 명시해주고 수신객체 타입임 (수신객체는 클래스에 속한 인스턴스 객체) 클래스뒤에 . 찍고 함수이름을 정의하여, 함수내부에서는 this키워드로 수신객체멤버를 사용 확장함수 예시 fun main() { val order = Order(listOf(Item("Bread", 25), Item("Wine", 30), Item("Water", 12))) //가장 비싼 아이템 이름 : Wine println("가장 비싼..

KOTLIN 2022.05.22

[KOTLIN] Scope 함수

Scope 함수 특정 객체의 컨텍스트(Object Context) 내에서 특정 동작을 실행하기 위한 목적만을 가진 함수 Scope 함수를 람다로 사용하게 되면 임시로 Scope를 형성하는데 해당 Scope내에서 객체의 이름을 일일히 참조할 필요 없이 객체를 접근하고 핸들링할 수 있음 let / run / with / apply / also 총 5가지 함수가 있으며, 기본적으로 객체에 붙어 있는 코드 블록을 실행함 Apply fun main() { val book = Book("코틀린 책", 10000).apply { //apply scope안에서 직접 인스턴스의 속성과 함수를 사용함 name = "특가 " + name discount() } println("${book.name}은 가격 : ${book...

KOTLIN 2022.05.18

[KOTLIN] 컬렉션

Collections (콜렉션) Kotlin은 표준 라이브러리는 집합, 목록 및 지도와 같은 기본 컬렉션 유형에 대한 구현을 제공 기본적으로 Mutable(가변)과 Immutable(불변)을 별개로 지원 Koltlin의 상속구조는 위에 이미지처럼 되어있으며 List, Set, Map과 같은 자료형을 제공함 List 순서가 있는 데이터 집합이며 중복을 허용 데이터를 삭제, 삽입을 해도 순서를 지키는 컬렉션임 Set 순서를 유지하지 않는 데이터 집합이며, 중복되는 데이터가 없음 null객체를 가질 수 있음 Map Key, Value 방식의 데이터 집합 순서를 유지하지 않으며, Key는 중복이 불가함 List / Set / Map 생성함수 요약 불변객체 생성 가변객체 생성 List listOf() mutabl..

KOTLIN 2022.05.18