Open LuterGS opened 2 years ago
Sequence
를 sequence {}
로 생성할 때, yield
나 yieldAll
로 sequence
블록에서 값을 내보내고 대기한다.
sequenceDiagram
participant o as outsideSequence
participant i as insideSequence
o->>i: sequence{} 호출
activate i
loop sequence{} 스코프 내부
i->>i: sequence{} 내부 작업
i->>o: yield 로 단일 변수 전달
i->>o: yieldAll 로 여러 개의 변수 전달
end
deactivate i
i-->>o: sequence{} 함수 실행 종료
<br>
observable
과 vetoable
은, 변수의 특정 값이 바뀔 때 실행되는 콜백 함수이다.
observable
의 경우 값이 바뀌였을 때 관측만 가능하고vetoable
은 값이 바뀌였을 때 값을 비교해 바꾸지 못하게 할 수 있다.
클래스 생성자에 일일히 변수를 할당하는 것보다, Map 을 넘겨주어 할당할 수 있다 (python 에서의 생성자가 dict 로 가능한 것처럼, 일종의 **kwargs
상위호환)
repeat
함수를 사용해 iteration 을 구현할 수 있다.
repeat
를 사용할 수 있다.
fun printWithRepeat(){
repeat(5) {
println("repeat $it")
// 순서대로 `repeat 0`, `repeat 1 `... `repeat 4` 가 출력된다.
}
}
<br>
실행 가능한 클래스 (클래스를 생성 후 다시 호출) 를 만들기 위해, 기본적으로 제공되는 invoke
를 이용해 구현할 수 있다.
class Test
밑에 operator fun invoke() { println("test") }
를 선언하면, 이런 식으로 작성할 수 있다.
val test = Test().let{ it() } // 혹은 test()
이렇게 호출되면, invoke()
함수가 호출되게 된다.
Kotlin 도 Thread 를 만들 수 있고, 더욱 간단하게 thread {}
를 이용해 스레드를 만들고 바로 호출할 수 있다. join 또한 사용 가능하다.
Kotiln 에서 JPA 사용 시, Entity class 를 data class
로 만들 수 있지만 잘 작동하지 않는다. 이럴 땐, kotlin-jpa
플러그인을 추가한다.
plugins {
kotlin("plugin.jpa") version "1.2.71"
}
data class
보단 class
로 만드는 것을 선호한다.
async
, await
를 사용할 때, async
후 바로 await
하려면, withContext
를 사용한다.
coroutine 을 디버깅하려면, 실행 시 -Dkotlinx.coroutines.debug
플래그를 사용한다.
출처 : (OREILLY) 코틀린 쿡북 (켄 코우젠 지음, 김도남 옮김, 초판)
Detailed Kotlin usage