투케이2K

607. (ios/swift5) [간단 소스] DispatchGroup 간단 설명 및 사용 옵션 정리 본문

IOS

607. (ios/swift5) [간단 소스] DispatchGroup 간단 설명 및 사용 옵션 정리

투케이2K 2024. 12. 5. 21:06

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT5

 

[소스 코드]

 

// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------

- 언어 : Swift


- 개발 툴 : Xcode


- 기술 구분 : DispatchGroup / 작업 그룹

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[설명 정리]
// --------------------------------------------------------------------------------------

1. DispatchGroup 은 DispatchQueue 들을 그룹으로 묶어서, 후행 클로저 (일이 끝난고 난 다음의 로직 처리) 를 할 때 사용 되는 작업 그룹 관리 클래스입니다


2. DispatchGroup 사용 시 그룹의 모든 작업 실행이 완료할 때까지 동기적으로 기다릴 수도 있습니다


3. DispatchGroup 사용 가능 지원 범위 : 

  >> iOS 8.0 이상
  >> 아이패드OS 8.0 이상
  >> 맥 카탈리스트 13.0+
  >> 맥OS 10.10+
  >> tvOS 9.0 이상
  >> 비전OS 1.0+
  >> 워치OS 2.0 이상
  >> 엑스코드 8.0+


4. DispatchGroup 디스패치 그룹 생성 관련 : 

  >> init() : 블록 객체를 할당할 수 있는 새로운 그룹을 만듭니다.


5. DispatchGroup 완료 핸들러 추가 관련 : 

  >> func notify(qos: DispatchQoS, flags: DispatchWorkItemFlags, queue: DispatchQueue, execute: () -> Void) : 현재 그룹의 모든 작업이 실행을 완료하면 지정된 속성을 가진 블록을 대기열에 제출하도록 예약합니다.
  >> func notify(queue: DispatchQueue, work: DispatchWorkItem) : 현재 그룹의 모든 작업이 실행을 완료하면 블록을 큐에 제출하도록 예약합니다.


6. DispatchGroup 작업 실행 완료 대기 관련 : 

  >> func wait() : 이전에 제출된 작업이 완료될 때까지 동기적으로 기다립니다.
  >> func wait(timeout: DispatchTime) -> DispatchTimeoutResult : 이전에 제출한 작업이 완료될 때까지 동기적으로 기다리고, 지정된 시간 초과 기간이 지나기 전에 작업이 완료되지 않으면 반환합니다.
  >> func wait(wallTimeout: DispatchWallTime) -> DispatchTimeoutResult : 이전에 제출한 작업이 완료될 때까지 동기적으로 기다리고, 지정된 시간 초과 기간이 지나기 전에 작업이 완료되지 않으면 반환합니다.


7. DispatchGroup 그룹 업데이트 작업 관련 : 

  >> func enter() : 블록이 그룹에 들어왔음을 명시적으로 나타냅니다.
  >> func leave() : 그룹 내 블록의 실행이 완료되었음을 명시적으로 나타냅니다.


8. DispatchGroup 사용 예시 소스 코드 : 

  var one = 0
  var two = 0


  let waitGroup = DispatchGroup() // [그룹]
  let jobQueue = DispatchQueue.main // [작업 큐]


  waitGroup.enter() // 선행 시작을 알림
  jobQueue.async {
      one = 1 // 변수 값 삽입
      
      Thread.sleep(forTimeInterval: 1.0) // 1 초 간 정지
      
      waitGroup.leave() // 실행 종료
  }


  waitGroup.enter() // 선행 시작을 알림
  jobQueue.async {
      two = 2 // 변수 값 삽입
      
      Thread.sleep(forTimeInterval: 1.0) // 1 초 간 정지
      
      waitGroup.leave() // 실행 종료
  }


  waitGroup.notify(queue: jobQueue) {
      S_Log._D_(description: "그룹 작업 실행 종료", data: [
          "one :: \(one)",
          "two :: \(two)"
      ])
  }

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

https://developer.apple.com/documentation/dispatch/dispatchgroup

https://blog.naver.com/kkh0977/223251810305?trackingCode=blog_bloghome_searchlist

https://blog.naver.com/kkh0977/223252303606?trackingCode=blog_bloghome_searchlist

// --------------------------------------------------------------------------------------
​

 

반응형
Comments