김동형수 개발기

Grokking Functional Programming - 2부 9장 본문

책 스터디/[완료] FP - Grokking Funtional Programming

Grokking Functional Programming - 2부 9장

김동형수 2023. 1. 19. 00:31

9장 값 으로 스트리밍

이 장에서는 다음을 수행하는 방법을 배웁니다.

  • 복잡한 프로그램 흐름을 선언적으로 설계
  • 재귀와 게으름을 사용하여 일부 결정을 연기
  • IO 기반 데이터 스트림 처리
  • 무한한 값의 흐름 생성 및 처리
  • 시간 종속 기능 분리

IO.delay 사용과 immutable map

무한한 수의 IO 호출과 관련하여 해결되지 않은 문제가 너무 많습니다. 우리는 어디서부터 시작해야할지 모를 것입니다. 따라서 대신 상향식 접근 방식을 사용 합니다.

 

tuple, case class를 이용

zip, drop 함수 이용

8장에서 나온 retry를 이용해서 api 호출

 

FP에서는 재귀를 사용하여 많은 문제를 해결합니다.

 

io를 반환하는 재귀함수를 선언하게되면 IO.delay가 호출되는 시점에 재귀가 실행하기 떄문에 성공할때까지 무한재귀함수가 실행된다?

 

게으른 평가, 재귀 및 잠재적인 무한 실행에는 공통점이 많습니다.

 

def lastRates(from: Currency, to: Currency, n: Int): IO[List[BigDecimal]] = {
  if (n < 1) {
    IO.pure(List.empty)                                ①
  } else {
    for {
      currencyRate   <- currencyRate(from, to)
      remainingRates <- if (n == 1) IO.pure(List.empty) ①
                        else lastRates(from, to, n - 1)
    } yield remainingRates.prepended(currencyRate)
  }
}

어떤 버전을 선택하든 요소 List[BigDecimal]가 n긴 를 얻습니다. 하지만 프로그램은 무한히 실행될 수 있습니다.

 

데이터 스트림 소개

더 나은슬라이딩 윈도우, 지연 및 고정 속도를 구현하는 접근 방식입니다. 이 접근 방식은 API 호출에서 가져온 데이터와 같이 지정되지 않은 양의 데이터로 작업할 때 특히 유용합니다. 우리는 재귀를 사용하여 이러한 문제를 처리하는 고전적인 접근 방식을 보여주었습니다. 우리는 또한 관심사의 분리라는 주제에 대해서도 간략하게 다루었습니다. 기능의 다양한 측면을 처리하는 격리된 모듈이 필요합니다.
 

무한 실행 가능성과 함께 이러한 모든 특성은 일반적으로 다른 아키텍처 접근 방식인 스트림 의 사용을 암시합니다 .

 
 
Stream불행하게도 Java는 값 을 재사용하는 것을 허용하지 않습니다 . 값 을 사용하면 Stream다시 사용할 수 없습니다. 따라서 실제로는 불변이 아니라 불변으로 작동합니다.
 

FP의 스트림은 값입니다.

우리는 일하고 있었다변경할 수 없는 값을 사용하며 스트림도 예외는 아닙니다.  Stream유형은 두 가지 유형 매개변수를 사용합니다. 둘 다 내부에서 발생하는 일에 대해 많은 것을 설명합니다.

스트림은 재귀 값입니다.

이사하기 전에IO 처리 스트림에 대해 계속 살펴보겠습니다. 기본 값 스트림을 더 많이 사용하고 친숙한 FP 기술을 사용하여 이를 처리하는 방법을 알아보겠습니다.

stream.compile.drain
 

스트림은 애플리케이션에서 문제를 분리하는 데 도움이 됩니다.

수많은 stream함수가 나온다.. map, filter, append, eval, take, orElse, sliding, zip, zipLeft, repeat (이해포기)

 

많은 기존 기술은 이러한 이점을 활용하려는 API를 노출합니다. FRP(Functional Reactive Programming)와 같은 용어를 접해보셨을 것입니다.), 반응형 프로그래밍 또는 반응형 API. 이러한 "반응형" API는 일반적으로 느리게 작동하는 연결기가 포함되어 있음을 의미합니다. 그것이 주류에 잠입한 FP의 힘입니다 .

 

 

 

 

Comments