안녕하세요 이웃님들~ 어제에 이어서 오늘은 Async/Await을 실제로 써보도록 하겠습니다~
어제 Do try catch 문을 잘 이해를 해 놓으셨겠죠~?
어제 설명드린대로 Async Await을 쓰면 클로저 지옥도 사라지고, 에러도 줄줄이 사탕처럼 if문으로 분기하고 이런 일도 없어지기 때문에 참 좋은 것인데요~!! 오늘 한번 실제로 코드를 써보면서 왜 좋은지 한번 더 알아보도록 하겠습니다~!!!
우리가 Async라는 이 단어 내지는 이 키워드를 안써봤으니까~ 뭔가 얘가 무슨 뜻일까 싶잖아요? 얘가 있으면 뭐냐!
명시적으로는 Swift Concurrency를 사용하겠다 인데요. 이 코드뭉치는 내부에서 비동기 동작이 있읍니다 하고 표기를 해주는거라고 생각하면 됩니다.
getImage 요 함수는 말이죠~
1. 내부에 비동기로 이미지를 가져오는 동작이 있어요(await : 비동기로 작업이 끝나면 ~ 해줘 라고 하는 키워드)
2. throws 키워드가 있어요 : 성공시에는 UIImage를, 실패시에는 error를 나타내는 뭔가를 대신 리턴한다는 것이죠.
3. 그래서 내부에서 do, try,catch를 사용해서 에러처리도 깔끔하게 하네요.
하 줄바꿈 버그인가 저는 똑바로 써도 줄바꿈이 자꾸 이상해지네요?
let url = URL(string: "...이미지주소...")
func getImage async throws -> UIImage? {
do {
let (data, response) = try await URLSession.shared.data(from: url, delegate: nil)
let image = UIImage(data: data)
return image
} catch {
throw error
}
}
짠 이렇게 작성하면 끝입니다.
1. try는 왜있다? URLSession.shared.data() 보시면요 옆에 async, throws 써있죠?
그중에 throws 이녀석이 try를 요구하기 때문에 그래서 do, try, catch를 써야 쓸수 있는 녀석이기 때문에 씁니당.
2. 우리가 작성한 getImage를 사용할때도 그럼 어떻게 한다?
-> throws하니까 try로 do, try, catch 쓰면서 작성해야되고, async한 동작을 할거니까 await로 기다렸다가 image에 할당해 다오 라고 작성을 해야겠죠!
do {
let image = try await getImage()
} catch {
/// 무언가 에러처리 할 부분
}
자 이렇게 간단하게 async/ await 사용법을 알아봤는데요?
사실 사용법만 놓고 보면 참 간단하죠?
대신 다음 편에서는
async/await 사용시 주의점
흔히하는 실수를 정리한 영상을 보고 번역을 해서 올려보도록 하겠습니다!
감사합니다!
[Swift] Decimal, Double의 소수점을 round, ceil, floor하기 (1) | 2023.06.26 |
---|---|
[Swift Concurrency] Async/Await 진짜 쉽게 이해하기 (3) - 흔히 하는 실수 (1) | 2023.06.13 |
[Swift Concurrency] Async/Await 진짜 쉽게 이해하기 (1) - Do,Try,Catch 알기 (5) | 2023.06.12 |
[Swift/iOS] 촬영한 이미지 돌아감 현상의 원인과 해결방법 (+카메라앱) (0) | 2023.02.13 |
[Medium/번역] Swift 로 Money Type 만들기 (0) | 2022.10.06 |