반응형

Language 28

[keyword] Companion Object

코틀린의 Class 와 Object Class 생성자는 [keyword] constructor 를 써서 정의한다. 객체 생성: 클래스명() Object 싱글턴(singletone, 인스턴스가 하나만 있는 클래스) 선언 방법 객체 생성: 클래스,인터페이스 확장 var obj = object:MyClass(){}, var obj = object:MyInterface{} ⭕ 시스템 전체에서 쓸 기능 ❌ 전역 상태 유지 Companion object static 이 아니다. 객체다. 클래스가 메모리에 적재되면서 함께 생성되는 동반(Companion) 객체 객체 생성: 클래스명.Companion.멤버 → 클래스명.멤버 class MyClass2{ companion object{ val prop = "나는 Comp..

Language/Kotlin 2022.02.17

[Coroutine] suspending method: 코루틴 일시 중단

suspending method 일시중단함수 yield 다른 코루틴에게 실행을 양보한다. (코틀린 모듈 최상위) 예제(yield) suspend fun doSomething111(): Int { log("📗", "doSomething111-----------start") yield() log("📗", "doSomething111-----------end") return 13 } suspend fun doSomething222(): Int { log("📘", "doSomething222-----------start") yield() log("📘", "doSomething222-----------end") return 29 } @Test fun yield_test() { runBlocking { val ti..

Language/Kotlin 2022.02.09

[Coroutine] Coroutine builder: 코루틴 시작

Coroutine builder 코루틴 빌더에 원하는 동작을 람다로 넘긴 후 → 코루틴을 만들어 실행한다. 🙉 Job , Defferd 는 뭐지? 더보기 코루틴 작업을 다루는 객체 (오브젝트) Job, Defferd에 대해 취소나 예외처리를 함으로써 용이하게 코루틴의 흐름제어를 할 수 있게 된다. Deferred 인터페이스는 Job인터페이스를 상속 받는다. 더 자세한 내용은 이전글을 참고해주세요! 2022.02.06 - [Platform/Android] - [Coroutine] Coroutine Context: 코루틴이 실행되는 곳 🙉 SendChannel, ReceiveChannel 는 뭐지? 더보기 둘 다 Channel! stream을 반환한다. FIFO 방식의 queue로 되어 있다. 더 이상 사용..

Language/Kotlin 2022.02.07

[Coroutine] Coroutine Context: 코루틴이 실행되는 곳

Coroutine Context 코루틴은 항상 Coroutine Context로 구성된 context 안에서 실행된다. 이 context는 Dispatchers와 Job으로 구성된다. Dispatchers 코루틴이 실행될 스레드를 지정하는 역할 Job 코루틴의 상태를 확인하고, 제어할 수 있다. → 코루틴의 수명주기를 제어할 수 있다. 더 자세히 알아보자! Job https://thdev.tech/kotlin/2019/04/08/Init-Coroutines-Job/ Dispatchers CoroutineContext의 주요 요소 코루틴의 실행 목적에 맞게 실행될 특정 Thread Pool을 지정해 준다. 코루틴 실행 도중, 일시 정지 or 실행 재개를 담당한다. 다음에 어떤 코루틴을 실행 시킬지 결정한다..

Language/Kotlin 2022.02.06

[Coroutine] Coroutine Scope: 코루틴이 실행되는 범위

Coroutine Scope 코루틴의 동작하는 범위를 규정. 스코프 내에서 실행되는 코루틴의 실행을 감시하거나 취소할 수 있다. GlobalScope 메인 스레드가 실행 중인 동안만 코루틴의 동작을 보장 앱의 생명주기와 함께 동작한다. 실행중에 별도의 생명주기 관리가 필요 없다. 예제 fun now() = ZonedDateTime.now().toLocalTime().truncatedTo(ChronoUnit.MILLIS) fun log(msg: String) = println("${now()} : ${Thread.currentThread()} : $msg") fun launchInGlobalScope() { GlobalScope.launch { log("coroutine started") } } Threa..

Language/Kotlin 2022.02.05

[Coroutine] 코루틴이란?

0. 큰 그림 큰 그림의 개념 부분을 이번 포스팅으로 작성하겠습니다~ 1. 코루틴, Coroutine 비선점형 멀티태스킹(non-preemptive multitasking) 을 수행하는 일반화한 서브루틴 즉, 서로 협력해서 실행을 주고받으면서 작동하는 여러 서브 루틴이다. 🙉 멀티태스킹/ 비선점형 멀티태스킹 / 선점형 멀티태스킹 이란? 더보기 먼저, 멀티태스킹 이란? 여러 작업을 동시에 수행하는 것처럼 보인다. or 실제로 동시에 수행한다. 비선점형 멀티태스킹 CPU를 차지하고 있는 쓰레드가 CPU 연산이 필요 없음을 나타냈을 때만 운영체제가 이를 중단시킬 수 있다. 강제로 죽이려면, 리셋해야 한다. 각 참여자들이 서로 자발적으로 협력해야 한다. 선점형 멀티태스킹 CPU를 차지하고 있는 쓰레드를 운영체제..

Language/Kotlin 2022.02.03

[KotlinInAction] 5장-람다로 프로그래밍(5) 수신 객체 지정 람다: with 와 apply

수신 객체 지정 람다 labda with receiver 수신 객체를 명시하지 않고 람다의 본문 안에서 다른 객체의 메소드를 호출할 수 있게 한다. (=어떤 객체의 이름을 반복하지 않고, 그 객체에 대해 다양한 연산을 수행할 수 있다!) 수신 객체지정 람다 중 하나인, with 와 apply 에 대해 알아볼까요? .1 with 문법 inline fun with(receiver: T, block: T.() -> R): R { return receiver.block() } receiver = 수신 객체, block = 수신 객체 지정 람다 수신 객체 지정 람다의 실행 결과를 반환합니다. 아래 결과가 나오는 코드를 3가지 방법으로 나열해 보면, ABCDEFGHIJKLMNOPQRSTUVWXYZ Now I kno..

Language/Kotlin 2021.12.08

[KotlinInAction] 5장-람다로 프로그래밍(5) 수신 객체 지정 람다: with 와 apply

수신 객체 지정 람다 labda with receiver 수신 객체를 명시하지 않고 람다의 본문 안에서 다른 객체의 메소드를 호출할 수 있게 한다. (=어떤 객체의 이름을 반복하지 않고, 그 객체에 대해 다양한 연산을 수행할 수 있다!) 수신 객체지정 람다 중 하나인, with 와 apply 에 대해 알아볼까요? .1 with 문법 inline fun with(receiver: T, block: T.() -> R): R { return receiver.block() } receiver = 수신 객체, block = 수신 객체 지정 람다 수신 객체 지정 람다의 실행 결과를 반환합니다. 아래 결과가 나오는 코드를 3가지 방법으로 나열해 보면, ABCDEFGHIJKLMNOPQRSTUVWXYZ Now I kno..

Language/Kotlin 2021.12.08

[KotlinInAction] 5장-람다로 프로그래밍(1) 람다 식과 멤버 참조

PREVIEW) 5장 - 람다로 프로그래밍 1. 컬렉션을 처리하는 패턴을 표준 라이브러리 함수에 람다를 넘기는 방식으로 대체하는 예제들 2. 자바 라이브러리와 람다를 함께 사용하는 방법 - 자바에서 처음부터 람다를 고려하지 않고 만든 라이브러리라도 람다를 활용하게 만들 수 있다! 3. 수신 객체 지정 람다(lambda with receiver): 람다 선언을 둘러싸고 있는 환경과는 다른 상황에서 본문 실행 위 내용을 배우기 전에, 기본 다지기로! 람다로 프로그래밍을 하기 위한 개념을 먼저 집고 넘어가도록 하겠습니다. 꼬고! 0. 시작 람다(lambda) 다른 함수에 넘길 수 있는 작은 코드 조각 use case) 컬렉션 처리 1. 람다 소개: 코드 블록을 함수 인자로 넣기 람다가 태어나기 전... 이벤트..

Language/Kotlin 2021.11.24
반응형