본문 바로가기
STUDY/iOS

[swift] 동기와 비동기

by 23g 2025. 4. 29.

동기(Synchronous)와 비동기(Asynchronous)는 작업 실행 순서처리 방식에 관련된 개념임
Swift에서는 특히 async/await, DispatchQueue, completion handler 같은 방식으로 비동기 처리를 많이 사용함

✅ 동기(Synchronous)

  • 작업이 순차적으로 실행
  • 앞 작업이 끝나야 다음 작업이 실행됨
  • 코드 흐름이 직관적이지만, 시간 오래 걸리는 작업이 있으면 앱이 멈춰 보일 수 있음
func fetchData() -> String {
    // 서버에서 데이터 가져온다고 가정
    return "데이터"
}

let result = fetchData()  // 완료될 때까지 기다림
print(result)

✅ 비동기(Asynchronous)

  • 작업이 백그라운드에서 실행되고, 바로 다음 코드로 넘어감
  • 결과는 나중에 콜백이나 async/await로 처리함
  • UI 멈춤 없이 작업 가능
// 예: completion handler 사용
func fetchData(completion: @escaping (String) -> Void) {
    DispatchQueue.global().async {
        let data = "데이터"
        DispatchQueue.main.async {
            completion(data)
        }
    }
}

fetchData { result in
    print(result)
}

✅ Swift 5.5부터 도입된 async/await

func fetchData() async -> String {
    return "데이터"
}

Task {
    let result = await fetchData()
    print(result)
}
  • await는 해당 함수가 끝날 때까지 잠시 기다림
  • 비동기 코드를 동기처럼 깔끔하게 작성 가능
  • Task {}는 비동기 context를 생성해줌

✨ 차이 요약

항목 동기 비동기
실행 순서 순차적 병렬 또는 예약 실행
코드 흐름 직관적 콜백, 클로저, await 필요
UI 영향 차단될 수 있음 UI 멈춤 없음
대표 사용 일반 계산, UI 변경 등 네트워크 요청, 파일 IO 등

여기서 내가 헷갈렸던 포인트

-> 그럼 await 왜 씀??? 그냥 동기 사용하면 되는거 아닌가?

 

=> 이유 : await는 비동기를 동기처럼 해당 작업이 끝날 때까지 기다려주는 역할을 함!

동기로 하면 안되는 이유는 동기로 했다가는 메인스레드가 멈출 수도 있어 사용자가 느끼기에 앱이 멈춰 보일 수 있음

 

✅ await 요약 정리

  • await는 비동기 작업을 동기처럼 보이게 작성할 수 있게 해주는 문법임
  • 실제로는 비동기 처리라서 UI 멈추지 않음
  • 동기 방식은 UI를 멈추게 할 수 있으므로 지양해야 함
  • await는 코드 가독성 향상, 에러 처리 간결화, 디버깅 용이성 제공
  • 기존 클로저 방식보다 훨씬 관리하기 쉬운 구조로 작성 가능함

최근댓글

최근글

skin by © 2024 ttutta