훌이
후리스콜링개발
훌이

블로그 메뉴

  • 왈 (iOS APP)
  • Github
전체 방문자
오늘
어제
  • 전체 (171)
    • ⭐️ 개발 (140)
      • JAVA (4)
      • Web (5)
      • iOS & Swift (94)
      • iOS Concurrency (4)
      • Rx (18)
      • Git (6)
      • WWDC (1)
      • Code Refactor (3)
      • Server (1)
    • ⭐️ Computer Science (22)
      • 운영체제 (10)
      • 네트워크 (5)
      • PS (7)
    • 경제시사상식 (8)
    • 기타 등등 (0)

인기 글

최근 글

05-16 22:28

티스토리

hELLO · Designed By 정상우.
훌이
⭐️ 개발/iOS Concurrency

[GCD] Dispatch Group

[GCD] Dispatch Group
⭐️ 개발/iOS Concurrency

[GCD] Dispatch Group

2022. 8. 29. 19:49
728x90
반응형

Dispatch Group

작업들의 모음, 그룹지어진 작업들이 어느 시점에 모두 완료되는 지가 관심사

1). 동기적인 함수 작업들이 완료될 때

2). 비동기적인 함수 작업들이 완료될 때 (주의!!)

 

서로 같은 색끼리 유사한 작업인데, 보라색/하늘색/빨간색 작업이 끝나는 시점을 아는 것이 DispatchGroup

작업을 그룹 짓고, 각 그룹별로 끝나는 시점을 알고 싶다!!!!!

 

 

 

특정 그룹의 모든 작업이 완료된 시점을 활용해서 무언가를 하고 싶다 이거임.

 

 

왜 이 개념이 필요할까?

예를 들면, 여러 애니메이션 효과가 겹쳐 있을때, 애니메이션이 모두 종료된 시점을 알고 싶다.

 

런치스크린 후에 앱 첫 화면에 브랜드 이미지가 다운로드가 덜 되어 있는 상황이라면 사용자가 에러라고 인식할 수도 있을 것임

첫 화면을 띄울 때는 다운로드가 다 되고나서 하자!라고 기획할 수 있을 것인데

이 때 DispatchGroup을 사용할 수 있을 것임

 


🔰1). 동기적인 작업들을 보낼 때의 DispatchGroup

그니까, task들이 동기적으로 끝나는 것들

 

 

group1이라는 DispatchGroup을 생성하고

작업(task)들을 스레드로 보낼 때 async 메소드 안에 group1이라는 걸 명시해주면 group1에 작업들이 묶이게 된다.

notify의 queue 파라미터 안에는 어떤 큐에서 작업을 실행할 것인지를 명시해준다.

 

 

그림으로 보면 아래처럼 된다.

꼬리표처럼 group1을 붙여주고, notify까지!

 

 

 

 

실제 코드로 보면,

 


그리고 동기적으로 기다릴 수 있음

어떻게 기다릴 수 있냐?

DispatchGroup에서 모든 작업이 완료될 때까지 현재 대기열을 block하고 wait() 메소드를 통해서 기다릴 수 있음

 

1. wait 메소드는 메인 스레드(1번 스레드)에서 작동시킬 경우, 앱이 멈추게 된다.

즉, 메인 스레드가 아닌 다른 스레드에서는 wait 메서드를 사용할 수 있다.

 

 

2. 근데 만약 "나는 마냥 기다리고만 있을 수는 없다. 60초까지만 기다리고 그 후에는 실행하겠다."인 경우에는,,,

 


🔰2). 비동기적인 작업들을 보낼 때의 DispatchGroup

예를 들어, task들이 urlSession 같은 경우

클로저 내에서 비동기 함수 작업들이 호출될 때 어떤 문제가 있을까?

 

 

비동기 함수가 호출이 되면 일이 끝나는 시점을 잘못 인식할 수 있다.

 

 

 

그러면 어떤 처리를 해야 올바르게 알 수 있는가?

enter - leave 표기를 통해서 제대로 인식하게 해줘야 한다.

 

 

실제 코드를 보면, 비동기 함수가 시작되고 끝나는 시점에 enter - leave를 붙여준다.

 

 

 

 


근데 이거를 언제... 써....? 어려월

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'⭐️ 개발 > iOS Concurrency' 카테고리의 다른 글

[GCD] Swift Concurrency - GCD  (1) 2022.09.02
[GCD] weak self  (1) 2022.08.20
[GCD] 섹션 1~3 요약정리  (3) 2022.08.18
  • Dispatch Group
'⭐️ 개발/iOS Concurrency' 카테고리의 다른 글
  • [GCD] Swift Concurrency - GCD
  • [GCD] weak self
  • [GCD] 섹션 1~3 요약정리
훌이
훌이

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.