코루틴 스터디 - Flow

1

한동안 푹쉬었던것 같습니다.
오늘부터는 다시 열공하겠습니다.


😥 1. Flow란?

Flow는 비동기 Stream입니다.

비동기 Stream이란?


Stream을 설명할때 PIPE라는 말을 하곤합니다.
어떤 값을 파이프 안에 집어넣었는데 안의 연산자(filter,map 같은 중간연산자)으로 인해 값이 바뀌고, 소비자에게 전달되는 구조를 Stream이라고 부릅니다.

Flow는 flow{} 빌더를 이용해 쉽게 만들수 있으며, emit()를 이용해 데이터를 방출, collect를 호출하여 값을 받습니다.

여기서 중요할껀 Flow는 콜드스트림이라는건데, collect를 호출했을때만 값을 방출합니다.

  • Cold Stream - 요청이 있을때, 1:1 로 값을 전달
  • Hot Stream - 0개 이상의 상대를 향해 지속적 값 전달

해당 예제를 보면, collect를 할때만 값을 가져오는것을 알수있다.

⚾️ 1 - 1 Flow에 Timeout걸기

일반적으로 네트워크 통신을 할때, OKHTTP에 TimeOut를 걸기 때문에, 잘쓰이지는 않을것입니다.
하지만 알고있으면 언젠가 도움이 되겠죠.

⚾️ 1 - 2 Flow 빌더?

Flow는 flow{} 이외에도 flowOf, asFlow같은 함수들을 제공해줍니다.

고정된 값을 방출하는 flowOf는 잘쓰이지 않지만, flow{}를 통해 flow를 만든다던지, 이미 받은 List를 asFlow 를 이용해 Flow를 만드는 방법은
잘쓰이기 때문에 알아두는것이 좋습니다.

🏈 2. Flow 연산자

잘 이해가 안되시죠? 쉽게 생각해봅시다.
방금 Flow를 PIPE라고 했습니다.
값을 넣었고, 그대로 Collect한 Consumer에게 결과값을 전달합니다.
그리고 중간 연산자를 통해서 Consumer에게 전달되기전 데이터를 입맛에 맞게 가공할수 있습니다.

2 - 1 Map

map자주 쓰이는 중간 연산자 입니다.
실무에서는 dto가 담긴 클래스를 다른 dto로 변형시키고 싶을때 자주 쓰입니다.
map을 통해 생성된 객체는, 같은 List라 하여도 계속 새로운 객체로 만들기 때문에 주의합시다!

2 - 2 Filter , FilterNot

Filter는 해당 술어를 통해 만족되는 값을 가공하고, FilterNot은 반대입니다.
검색기능을 filter를 통해 쉽게 구현해낼수 있습니다.

2 - 3 transform

중간연산자로 변형하기전의 값이 필요하던지, 두개 이상의 변형된 값이 필요하다면 transform을 고려해봄이 바람직합니다.

2 - 6 reduce

reduce는 누진적으로 값을 계산해준다.

만약 1, 2, 3, 4, 5 가 있을때 더해가며 계산하여 3, 6, 10, 15가 발행된다.

2 - 8 count

count는 종단 연산자이며, 만족하는 자료의 갯수를 리턴해준다.
종단연산의 예로는 collect가 있는데, 결과를 리턴해주는 역할을 한다.

profile
쉽게 가르칠수 있도록 노력하자

0개의 댓글