• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

안녕하세욤

23.02.14 14:39 작성 조회수 225

1

안녕하세요. 몇 달 전부터 동기/비동기 개념에 관해 틈틈히 짤막하게 찾아보고 (물론 이해는 안가네요🥲) 나름대로 의미를 정립해봤어요. 강의를 듣기 전에 생각을 정리해보고자 질문드립니다. 그러면 강의 듣는 데 더 도움이 되리라 생각해서요.

 

Swift에서 비동기 개념에서 여러 가지 방법이 존재하는 걸로 보이는데, 무슨 차이가 있는 건가요? 🥺

① DispatchQueue

② async/await

③ CompletionHandler-Callback 🤔

 

개념은 같아 보이는데, 단순히 버전 차이인가요? 특히 (3)의 방법이 너무 어렵고 복잡해서 (2)의 방법이 새로 나왔다고 알고 있는데, 셋 모두 비슷한 맥락인가요?

 

 

답변 1

답변을 작성해보세요.

1

네 안녕하세요 건우님
강의를 들으시면 다 해결이 될 것 같긴한데..

(1) DispatchQueue
대기열의 개념입니다. 여기다가 보통 작업을 집어넣어서 일을 시켜요. 예를 들자면.. 커피숍에 가면 사람이 많으면.. 계산할려고 줄을 서잖아요? 일을 시키기 위해서 작업을 디스패치큐(DispatchQueue)라는 대기열에 보내면.. 대기열에서 알아서 작업(일)을 시킵니다. 보통은 1번 CPU(쓰레드)에서 하던 (오래걸리는) 일을 2번 CPU(쓰레드)로 보내는 작업을 할때 사용해요.

(2) async/await
네 요거는 새롭게 등장한 개념이예요. (지금 현재 강의엔 내용이 들어있지 않고, 업데이트할 예정입니다.) 비동기 라는 개념 자체(2번 CPU한테 일을 시키고 일이 다 실행될때까지 기다리 않는 것)를 먼저 이해하셔야 이 내용을 이해하는 것이 가능한데, 기존엔 (일반적으로 일을 오래동안 하는) 함수 내부에 비동기 코드가 있으면, 내부에서 해당 작업을 기다릴 수가 없었습니다. 그래서 함수를 만들때도 리턴타입을 만들 수가 없었죠. (강의를 보시면 내용을 이해하게 될 수 있습니다.)

무튼 그런데, 새로운 개념을 만들어서 (오래 걸리는) 함수 등 작업을 기다렸다가 재게 시키는 그런 개념을 만들었습니다. 예전에는 안되었었는데.. 오래 걸리는 작업을 비동기적으로 시키고(async) 그 함수가 다시 재개가 될때까지 기다리는(await)개념이예요. (이것때문에.. 함수가 비동기적인 일을 수행하고도 값을 return 하는 것이 가능해졌습니다.)

(3) CompletionHandler - Callback
콜백함수의 개념을 찾아보시면 좀 도움이 됩니다. 1번 CPU(쓰레드)에서 일이 오래걸리는 함수를 2번 CPU(쓰레드)에 보냈을때.. 2번 CPU에서 오래 걸리는 일을 다 한 다음에.. 어떤 값을 return을 하는 것이 아니라.. (일반적으로 return을 못시킴) 다시 다른 함수를 실행시키면서(콜백함수) 일이 끝나는 시점을 알렸었습니다.

네 맞아요. (3)의 방법이 복잡하고 어렵다기 보다는.. 직관적이지 않고, 코드를 읽는 가독성이 떨어지기 때문에 (2)의 방법이 새롭게 등장한게 맞습니다.

3가지가 비슷한 개념은 아닙니다. 1번 방법은 전통적인 처리법이고.. 이 전통적인 처리법을 따라서 어떤 작업들을 처리했을때 반드시 3의 개념을 사용해서 처리해야만 했었죠. 근데, 불편해서 2를 도입한 것이라고 보시면 됩니다.

 

감사합니다. :)

건우 김님의 프로필

건우 김

질문자

2023.02.14

답변 주셔서 감사합니다.