leebaek

[Swift] 동기, 비동기 함수에 대해 알아보자 본문

개발/Swift

[Swift] 동기, 비동기 함수에 대해 알아보자

leebaek 2025. 3. 8. 18:41

 

☆ [핵심만 골라배우는 SwiftUI 기반의 iOS 프로그래밍] 책 내용 중 기억할 내용을 정리하였습니다.


■ 동기 함수와 비동기 함수를 알아보자

 

□ 동기 함수

함수 실행이 완료될 때까지 다음 코드 실행이 멈추는 함수를 의미합니다.

작업이 끝날 때까지 메인 스레드가 대기해야 합니다.

 

- 코드가 순차적으로 실행되므로 코드 실행 순서를 예측하기 쉽습니다.

- 실행 시간이 긴 작업이 있으면 프로그램이 멈춘 것처럼 보일 수 있습니다.

 

import Foundation

func syncFunction() {
    print("동기 함수 시작")
    Thread.sleep(forTimeInterval: 3) // 3초 동안 대기
    print("동기 함수 종료")
}

print("함수 호출 전")
syncFunction()
print("함수 호출 후")
실행결과

함수 호출 전
동기 함수 시작
(3초 대기)
동기 함수 종료
함수 호출 후

□ 비동기 함수

작업이 끝날 때까지 기다리지 않고 바로 다음 코드가 실행되는 함수를 의미합니다.

백그라운드 스레드에서 작업을 실행하고, 실행이 완료되면 메인 스레드로 돌아올 수 있습니다.

 

- UI 작업을 원활하기 처리하기 위해 네트워크 요청이나 파일 읽기 같은 작업에서 자주 사용됩니다.

 

import Foundation

func asyncFunction() {
    print("비동기 함수 시작")
    
    DispatchQueue.global().async {
        sleep(3) // 3초 동안 대기
        print("비동기 함수 종료")
    }
}

print("함수 호출 전")
asyncFunction()
print("함수 호출 후")
실행결과

함수 호출 전
비동기 함수 시작
함수 호출 후
(3초 후)
비동기 함수 종료

□  동기 함수 vs 비동기 함수 차이점 정리

구분 동기 비동기
실행방식 함수 실행이 완료될 때까지 기다림 함수 실행 후 바로 다음 코드 실행
멀티스레드 단일 스레드 사용 여러 스레드 사용
성능 영향 실행 시간이 길면 프로그램 멈춘 것처럼 보일 수 있음 백그라운드에서 실행되어 UI 멈춤 없음

 

앱이 처음 시작될 때 런타임 시스템은 보통 앱이 기본적으로 실행되는 단일 스레드를 생성한다.

이 스레드를 메인 스레드라고 하는데, 메인 스레드의 주요 역할은 UI레이아웃 렌더링, 이벤트 처리 및 사용자 인터페이스에서 뷰와 사용자 상호작용 측면에서 사용자 인터페이스를 처리하는 것이다.

 

메인 스레드를 사용하여 시간 소모적인 작업을 수행한다면 작업이 완료될 때까지 전체 앱이 멈춘 것 처럼 보일 수 있다.

이는 수행할 작업을 별도의 스레드에서 시작해주면 피할 수 있다.