Future Promise 는 비동기 작업에 대한 클래스
비동기 작업을 체인하고 싶을 땐 map flatmap 을 사용하면 됨
하지만 계속해서 인덴트가 깊어지는 콜백헬이 오게 됨
(대충 유명한 짤)
그래서 async await 라는 키워드를 도입해서 신택스 슈거를 도입함
코틀린은 이걸 좀 더 생각해서 suspend 키워드 하나면 구현 가능해냄
(suspend 함수 호출 시 기본적으로 await 가 붙어있다고 생각하면 됨)
그리고 이걸 Future 클래스만이 아닌 일반적인 모나드에서 사용할 수 있게 만든것이 do 표기법
(하스켈보다 좀더 가독성이 좋다고 생각하는 스칼라의 do 표기법)
var f = await Future 를 f <- Future 로 표기할 뿐임
이런식으로 이해하면 이 세 개념들은 별거 없더라
코틀린 suspend 는 await 안하고 싶은 async 함수는 어케함? - dc App
코루틴빌더로 한번 감싸면 됨
그런게있구만 - dc App
C# async await 이 좋음
ㄹㅇ
js가 결국 c# async/await 빌려온거아님?
확실히 C# Task 개념이 이해하기 제일 간편하긴 하더라
async/await 문법 택한 언어 많던데 C#에서 가져온게 맞음?
await 도입 순서 (
https://en.wikipedia.org/wiki/Async/await)
F#
→ C# → 하스켈 → 파이썬 → TS → JS → 러스트 → C++ → 스위프트
스칼라 저게 보기 좋다소 생각하는거냐
“모나드를 다루는 일반화된 방법”
다른 모나드를 다루는 문법을 특수화 없이 고대로 비동기에도 적용가능하니까 좋지
아 나는 "하스켈" 보다 스칼라가 더 보기 좋다고 쓰려고 한 의미였음
애초에 do notation이 모나드를 심화있게 다루는 하스켈이나 스칼라 등에서 유용하고 거기에서만 쓰이는거라 다른 것들과 비교대상이 아니긴하지
2번이 적당함 async await
스칼라하고 하스켈 do notation 비교하면 하스켈엔 let이 있고 스칼라엔 없다 이 차이 뿐임?
Rust처럼 .await으로 메소드 호출하듯이 하는것도 적응되니까 꽤 편하더라
이거 은근 편함 js 쪽은 await 들어가면 전부다 괄호로 묶어줘야 해서 불편해
비동기 작업을 체인하고 싶을 땐 map flatmap 을 사용하면 됨 <- 이건 Future 모나드고(Promise의 then 체이닝) 하지만 계속해서 인덴트가 깊어지는 콜백헬이 오게 됨 <- 이건 맥락이 cps인거 아님? then 체이닝하면 인덴트 그렇게 안 깊어지잖아 - dc App