우당탕탕 무작정 앱 개발하기

일반인의 Flutter 앱개발 11. Dart(async Returnung Future, Stream, Listen, asBroadcastStream)

간다간다숑간다 2022. 10. 12. 11:12
728x90

cont. Asynchronous Programming

지난번 10번 포스팅에 이어 같은 영상이다. 요새 드는 생각이 확실히 1강 2강 때보다는

좀 더 상위단계 같은 느낌이 나는 것 같다. 그렇지 않은가? 나만 그런가 ㅋㅋㅋ

재미도 없고 인기도 없는 글을 읽어주는 당신께 박수를 보낸다.

오늘 이번 영상 끝내고 내일부터는 함수 파먹을 거니까 각오하라

더보기

아 미안하다 방금 밑에서 올라왔는데 다음 포스팅으로 넘어간다^^


Returning Future

리터닝 퓨처라... 느낌상 어려울 것 같지 않다. 해보고 어려우면 밑에서 사과하겠다.

Retuning Future

지난번에는 Future를 Void로 리턴받았었는데 이번에는 값을 리턴 받는 방법을 배워보자.

지금 addNumbers라는 놈은 리턴하는 값이 Void인데 이놈이 'number1+number2'라는 값을 리턴하게 하여 그 값을 이용하는 코드로 바꿔보면서 연습할 것이다.

Retuning Future

void->int를 해줬고 return이 void였는데  'number1+number2' 값을 리턴해줬다. 이제 이 리턴 값을 이용하는

부분을 써보자.

Retuning Future

result1 이라고 변수를 만들어줬는데 타입을 지정하지 않았다고 메시지가 나오길래 마법의 키워드 var를 넣어줬다.

강의에서는 final로 선언했는데 왜 그래야 하는지 모르겠어서 내 마음대로 해봤다. 혹시 아는 사람 있으면 알려달라.

결과는?

Retuning Future

아름답게도 원하는 결과가 나왔다.

Returning Future 는 쉬웠다. 다행히


Stream

Stream이란 개념은 async programming에서 사용하는 기술 중 하나인데 어렵다고 한다.

특히 Future가 어려웠다면 이번에 기대(?) 해도 좋다고 한다. 대체 뭐길래 이렇게 시작부터 

겁을 주고 하는지...?

지금까지도 어려웠으니 이것도 어려워봤자 그만큼만 어렵길 기대하며 파먹어보자.

이해 안 되면 포스팅 끝내겠다.

이번에도 코드팩토리님 강의 내용을 캡처했다. Stream은 Future와 개념을 비교해보면 좋다고 하신다 

시작해보자.

Future는 실행을 하면 awaut를 통해 기다렸다가 리턴 값을 받으며 완료를 한다. 그리고 함수는 하나의 반환 값을 리턴한다. 대부분의 함수가 그렇다. 지금은 이게 단점 인지도 모르겠을 정도이다. 당연히 지금까지 이랬으니깐.

그런데 이게 불편하다고 해결해낸 개발자형님들이 계시다.

Stream

그것이 바로 Stream

Stream은 물이 졸졸 흐르는 개울인데 이 개념이 개울과 비교된다.

이 Stream은 개발자가  'yield' 키워드를 사용해서 무한히 계속 반환 값을 받을 수 있는데 개발자가 닫기 전까지 계속 받는다.

이름 참 잘 지었다.

Stream은 Dart의 기본기능은 아니고 Dart가 제공하는 패키지 안에 들어있기 때문에 불러와주는 키워드를 써야 한다.

'기본으로 제공할거면 왜....?'라는 질문을 해보았지만 개발자 형님들이 그걸 몰라서 안 했을 리가 없다고 생각되니 그냥 넘어가 본다.

dart stream

패키지는 불러올 때는 'import'를 써주면 된다. 그러면 async라는 패키지안에 개발자 형님들이 만들어놓은 코드들을 내가 만든 것처럼 쓸 수가 있다.

dart stream

async패키지를 불러오면 'StreamController'라는 Class를 쓸 수 있는데 이 Class안에 'stream'이라는 기능이 있다.

dart stream

이제 이 stream을 이용해서 'streamListener1'에 값을 받아보자.

stream에는 'listen'이라는 함수가 있어서 쓸 수 있는데 'val'이라는 값을 받아

개울가에 졸졸 흘리면 그 값을 streamListener1가 계속 받아내는 형태다. 다음 코드를 보면 이해가 될 것이다.

dart stream
'sink'는 stream에서 이벤트를 발생시켜 listener에게 전달해주는 역할을 한다.

출력 값은

dart stream

예상했던 값이 나오며 Stream을 성공적으로 시도해봤다.

응용하여

dart listener

이런 것도 된다.

그런데 우리가 하려던 건 이렇게 간단한 게 아니잖은가? 우리는 슈퍼 프로그래머가 될 것인데 이정도로 만족할 수가 없지 않겠는가? (내 기준의 슈퍼프로그래머 = 앱 만든 사람)


Stream 여러 번 Listening 하기

asbroadcaststream

단순하게 LIsterner2를 만들어줬더니 Dart는 나에게 나쁜 상태라고 메시지를 줬다.

Dart는 내게 친절히 알려줬지만 나쁘다고 하니까 왠지 기분이 나빴다. 좀 삐딱한 편ㅋㅋ

이 문제를 해결하고 슈퍼 프로그래머가 되기 위해 형님들이 만드신 게 바로

asbroadcaststream

이름부터 멋있다.' 브로드캐스팅 스트림' 뭔가 다수의 시청자가 있는 스트리머가 된 느낌이랄까?

이 기능을 추가해줬더니 모든 문제가 해결됐다. 

asbroadcaststream

아 공부를 하다 보니 포스팅 하나 치를 넘겨버렸다. 얼마 안 한 거 같은데 말이다.

씻고 이발을 하러 가야 하니(어제 샤워 안 하고 잠ㅋㅋㅋ)

여기서 끊고 다음 포스팅에 stream을 이어 나가겠다.

틀린 점이나 궁금한 점이 있으면 댓글로 알려달라.
입문자라 아무것도 모르고 이상한 소리를
썼을 가능성이 매우 매우 농후하다.
궁금한 점은 댓글로 토론하며 정답을 찾아보자.
코드팩토리님의  Dart강의를 보고 공부 중입니다.
728x90