2023 07 02
2023-07-02¶
For Comprehension¶
- 개요
- Scala에서 Future를 다루기 위해서는
flatMap,map,filter를 쓸 수 있다 for comprehension을Future와 함께 쓴다면, 다수의 비동기 Computation을 동시다발적으로 쓸 수 있다for comprehension안에 들어가는 expression 중에서는 Future, List, Option 등이 들어간다- 이게 monadic operation으로 뚝딱 해결된다는데...?
- Scala에서 Future를 다루기 위해서는
- 코드로 살펴보기 - Future
def operation1(): Future[Int] def operation2(value: Int): Future[String] def operation3(value: String): Future[Double] val result: Future[Double] = for { value1 <- operation1() value2 <- operation2(value1) value3 <- operation3(value2) } yield value3 val result2: Future[Double] = operation1().flatMap { value1 => operation2(value1).flatMap { value2 => operation3(value2).map { value3 => value3 } } }
Future.flatmap() vs Future.onComplete()¶
- flatMap()
- flatMap은 비동기적인 연산을 composing 하는데에 사용된다
- 여러개의 Future를 체이닝하는 용도
- for-comprehension도 future의 체이닝!
- onComplete()
- Future에 대한 콜백메서드를 지정
- Future가 완료되었을때, 실패했던 성공했던 이걸 실행하도록 지정하는 콜백 메서드
- Future를 새로 만들진 않고, 그냥 존재하던 Future 어떻게 처리할지를 다뤄
- Future의 값 자체는
Option[Try[]]타입이라 이걸 평가하는 것def calculateMeaningOfLife: Int = { Thread.sleep(2000) 42 } val aFuture = Future { calculateMeaningOfLife } println(aFuture.value) // Option[Try[Int]] aFuture.onComplete { case Success(meaningOfLife) => println(s"Success $meaningOfLife") case Failure(exception) => println(s"${exception.getMessage}") }