가장 많이 오해하는 절차적 코드 작성 효과로 인한 절차지향화?
일단, C#과 js 공통사항인데, await 문은 async function 에서만 쓸 수 있다.
물론 절차지향 코드가 간결하다는 장점이 있어서 이걸 절차지향으로 오해하는 일이 생기는데,
일단, 바벨js 부터 확인하고 얘기하자. https://babeljs.io/repl
들어가면 디기 간단한 async await 예제와 그걸 es2015 방식으로 생성한 코드가 있을 거다.
일단 생성된 코드가 더럽게 복잡하지만, 내가 확실한 포인트를 주자면, 흐름 제어가 주 요소라는 거지.
async function 을 일반 function 에 갖다 쓸 수 있지만 리턴받는 값은 무조건 Promise 객체지.
즉, 신기루라는 거야. 절차지향의 신기루. 환상에 불과하다는 거지.
await 문이 절차지향적으로 바꿔주는게 아니라, 절차지향 방식의 신기루로 비동기 처리를 도와주는 헬퍼 구문이라는 거야.
그럼 여기서 의문점이 남는다면 await 문 다음에 구문이 돌아가야 하나? 절차지향적으로 해석하면 돌아가면 당연히 안 돼.
그래서 해석한 코드를 보면 step 이라는 개념이 도입됐다. 당장 궁금하다면 아까 바벨 놀이터에서 await 문 바로 뒤에 아무거나 넣어봐.
그러면 어느 시점에 니가 쓴 구문이 돌아가는지 눈에 보일 거다.
결론: async await 문은 절차지향의 신기루. 즉, 환상이라는 거다. 환상은 환상일 뿐, 엄밀히 절차지향이 아니라, 흐름으로 간다는 거다.
자린이들은 await 문에 대한 궁금증이 생긴다면 절차지향은 이미 충분히 익혔으니 흐름 제어 개념을 배우도록 하자. (flow control)
쥥ㆍㄱ - dc App