사실은 동기 비동기... 더 깊게 파봤어야 하는 게 맞는데 비동기라는 단어가 너무 무시무시해서 대충대충 개념만 보다가... 탈출 클로저를 보는 도중, 비동기라는 단어를 다시 마주하게 되었다. 더이상은 미룰 수 없다!!!!!!
사실 swift를 공부하면서 검색을 몇 분만 하면, 아 이런 거구나 대충 이해할 수 있는데, 아무리 봐도 끝까지 이해가 안 됐던 것들 중 하나가 바로 DispatchQueue다.
결국 찾고 찾고 찾다가 인프런 강의(🔗 https://www.inflearn.com/course/iOS-Concurrency-GCD-Operation)를 보게 되었고...
설명을 너무 잘하셔서... 원래 미리보기만 들어보려고 했는데... 곧 결제를 할 예정이다...^^ 💰
작업들을 어떻게 다른 쓰레드에서 동시에 일을 하게 할 수 있을까?
iOS에서는 작업을 <대기행렬(queue)>에 보내기만 하면 알아서 다른 쓰레드로 분산 처리해 준다.
이때의 대기 행렬의 종류에는 GCD와 Operation이 있다.
그렇다면 이때 우리가 해야 할 일은?
바로 작업들을 큐로 보내는 일이다!
그럼 큐로 보내는 방법은 무엇일까
DispatchQueue.global().async {
//작업
}
작은 플젝들을 진행하면서 이런 코드를 정말 많이 봤다. 코드를 그대로 해석하자면
DispatchQueue
: 큐에 보낼 거야 (dispatch는 보내다라는 뜻)
global()
: 글로벌 큐에
async
: 비동기적으로
-> 클로저 안의 작업들을 비동기적으로 글로벌 큐에 보내겠다!라고 해석할 수 있다.
동기는 Synchronous이다. 해석하면 동시에 일어난다는 듯.
동기의 특징은 다음과 같다.
-> 작업이 차례대로 진행된다. 하나의 작업이 끝나야 다음 작업이 시작된다.
비동기는 Asynchronous이다. 해석하면 동시에 일어나지 않는다라는 뜻.
비동기의 특징은 다음과 같다.
-> 우리가 보통 생각했을 때, 동시에 작업이 일어난다!는 비동기를 의미한다.
사실 이게 궁금해서 비동기에 대해 검색하게 된 건데, 마침 강의를 듣다가 알게 돼서 너무 행복... 속이 시워어어어언허다~
비동기가 필요한 이유의 대부분은 서버와의 통신 때문이다. 네트워크에 정보를 달라고 요청하였을 때, 네트워크 상황에 따라 시간이 얼마나 걸릴지 모른다.
따라서 네트워크와 관련된 작업들은 내부적으로 비동기적으로 구현한다.
직렬은 순서가 중요한 작업을 처리할 때 굿
하나의 작업이 끝나야 하나가 실행되니까!
강의를 듣다 보니 비동기와 동시가 완전히 다르다는 걸... 너무 알게 됨. ㅎ
예전의 난... 대체 뭘 헷갈렸던 걸까? ༼´༎ຶ༎ຶ༽
🔗
https://www.inflearn.com/course/iOS-Concurrency-GCD-Operation