Function literals with receiver 문서 정리를 공부한 이후 작성한 코틀린 receiver 이해를 위한 예시 정리data class Foo(private val name: String) { fun bar1(block: Foo.() -> Unit) { block() } fun bar2(block: (Foo) -> Unit) { block(this) } fun bar3(block: Foo.(s: String) -> Unit) { block(name) } fun bar4(other: Foo, block: Foo.() -> Unit) { other.block() ..
코틀린
Function types코틀린은 함수를 다루는 선언에 (Int) -> String과 같은 함수 타입을 사용한다. val onClick: () -> Unit = ...이러한 타입은 함수의 시그니처(매개변수와 반환 값)에 해당하는 특별한 표기법을 가진다. 모든 함수 타입은 괄호로 묶인 매개변수 타입 목록과 반환 타입을 가진다: (A, B) -> C는 타입 A와 B의 두 인수를 받아 타입 C의 값을 반환하는 함수를 나타내는 타입이다. 매개변수 타입 목록은 () -> A와 같이 비어 있을 수 있습니다. Unit 반환 타입은 생략할 수 없다.함수 타입은 선택적으로 추가 수신자 타입을 가질 수 있으며, 이는 표기법에서 점(.) 앞에 지정된다: A.(B) -> C 타입은 객체 A에서 매개변수 B와 함께 호출할 수 ..
public interface Job : CoroutineContext.Element { // ...}Job은 CoroutineContext의 Element를 확장한 객체이다.Job은 백그라운드에서 동작하고 개념적으로 완료 시 종료되는 라이프사이클을 가진 취소 가능한 것이다. 계층 구조의 JobJob은 부모-자식 계층 구조로 배열할 수 있다.이때 부모가 취소되면 모든 자식이 재귀적으로 즉시 취소된다. 그리고 취소 예외(CancellationException)가 아닌 예외가 있는 자식이 실패하면 그 부모와 결과적으로 다른 모든 자식도 즉시 취소된다.이러한 예외의 전파는 SupervisoerJob을 사용하여 예외 전파를 막을 수 있다. Job의 생성Job 인터페이스의 가장 기본적인 인스턴스는 다음과 같..
SupervisorJob은 자식 Job으로부터 예외를 전파받지 않아 서로 독립적으로 실패할 수 있다.참고로 Supervisor의 뜻은 감독자다 자식 Job이 실패하거나 취소되어도 SupervisorJob이 실패하지 않고 다른 Job의 작업에 영향을 미치지 않는다.SupervisorJob은 자식 Job의 실패를 처리하기 위한 사용자 지정 정책을 구현할 수 있다.launch를 사용하여 생성된 자식 Job의 실패는 컨텍스트에서 CoroutineExceptionHandler를 통해 처리할 수 있다.async를 사용하여 만든 자식 Job의 실패는 결과 지연 값에 대한 Deferred.await을 통해 처리할 수 있다. 상황Job자식 코루틴끼리 운명을 같이 해야 하는 경우Job()자식 중 하나가 실패해도 다른 작업..
새 코루틴의 범위를 정의한다.코루틴을 생성하기 위한 명세서이다. 모든 코루틴 빌더(예: launch, async 등)는 코루틴 스코프의 확장이며, 코루틴 컨텍스트를 상속받아 모든 요소와 취소를 자동으로 전파한다.public fun CoroutineScope.launch( context: CoroutineContext = EmptyCoroutineContext, start: CoroutineStart = CoroutineStart.DEFAULT, block: suspend CoroutineScope.() -> Unit ): Job { // 기존의 컨텍스트와 합쳐진 새로운 컨텍스트 val newContext = newCoroutineContext(context) ..
데이터 클래스는 주로 데이터를 보유하는 데 사용된다.각 데이터 클래스에 대해 컴파일러는 인스턴스를 읽을 수 있는 출력으로 인쇄하고, 인스턴스를 비교하고, 인스턴스를 복사하는 등의 작업을 수행할 수 있는 추가 멤버 함수를 자동으로 생성한다. 컴파일러는 기본 생성자에서 선언된 모든 프로퍼티에서 다음 멤버를 자동으로 파생한다.equals()/hashCode()toString()componentN()copy()컴파일러는 자동으로 생성된 함수에 대해 기본 생성자 내부에 정의된 프로퍼티만 사용한다.생성된 구현에서 프로퍼티를 제외하려면 클래스 본문 안에 프로퍼티를 선언해야 한다. 생성된 코드의 일관성과 의미 있는 동작을 보장하기 위해 데이터 클래스는 다음 요구 사항을 충족해야 한다.기본 생성자에는 매개변수가 하나 이..