View
[ iOS 앱 개발 - Swift] 비동기 프로그래밍과 OperationQueue
이번에는 비동기 프로그래밍에 대해 공부를 해봤습니다!
느낀 바를 토대로 간단히 요약하자면, "여러명이 병렬적으로 일하게 만들기" 라고 할 수 있을 것 같네용. 작업 큐에 넣어 다른 스레드에서 작업을 수행시키고, 필요하면 또 메인 스레드를 호출해서 작업을 수행시키고, 이런 방식으로 진행하는게 비동키 프로그래밍이라고 생각됩니다.
개념 이해하기
프로세스 Process
하나의 프로그램이 메모리에서 실행되는 작업단위를 말합니다. 단순하게 작업이라고 말해도 상관없을 것 같네요.
스레드 Thread
스레드는 프로세스의 작업흐름의 단위를 말해요. 한 프로세스가 여러 스레드를 사용해 작업을 병렬적으로 수행할 수도 있습니다.
비동기 프로그래밍 Asynchronous Programming
프로그램의 주요 실행 흐름에서 특정 작업에 시간이 많이 소요될 때, 해당 작업을 수행하면서 프로그램의 아래 코드도 함께 계속 수행하는 방식. 1번 스레드와 2번 스레드가 티카타카 없이 따로 작동해서 비동기 프로그래밍이라고 하나봅니다.
동시성 프로그래밍 Concurrency Programming
시간을 분할해 하나의 CPU가 여러 스레드를 번갈아 실행하면서 동시에 여러 프로그램이 동작하는 것처럼 보이도록 하는 프로그래밍 방식입니다.
병렬성 프로그래밍 Parallel Programming
여러 스레드를 여러 CPU가 실행해서 진짜로 여러 프로그램이 동작하는 프로그래밍 방식입니다.
비동기 프로그래밍을 위해 iOS 개발에서는 대표적으로 Dispatch Queue 또는 Operation Queue를 사용하게 됩니다. Dispatch Queue는 FIFO 순서로 작업을 처리하며, Objective-C 위에서 작동하게 되고, Operation Queue는 기본적으로는 FIFO 순서이지만 조건에 따라 뒤의 작업을 먼저 수행시킬수도 있습니다. 이 방식은 애플의 GCD위에서 작동합니다.
두 방식의 차이가 아직은 큰 문제를 발생키지 않으니, 서로의 장점이 필요할 때 까지는 발음이 마음에 드는 Queue를 골라 사용해주면 될 것 같네요. ㅋㅋㅋㅋ 나중에 필요하면 다시 차이점을 작성해보도록 하죱!
OperationQueue로 비동기 프로그래밍 해보기
비동기 프로그래밍을 통해 아래 이미지처럼 인터넷에서 큰 용량의 사진을 하나 다운받아 오는 앱을 만들어볼게요.
이미지 주소 > https://upload.wikimedia.org/wikipedia/commons/3/3d/LARGE_elevation.jpg
코드 짜기
이렇게 스토리보드를 작성해주고, 작성한 코드의 IBOutlet과 IBAction을 연결해주었습니다. 위 이미지와 같은 코드를 작성해주었습니다. 버튼을 누르면 url을 저장하고, 이를 통해 데이터로 만들어 준 다음 imageVIew에 다운받은 이미지를 넣어주는 코드입니다. guard 나 try 구문때문에 복잡해보일 뿐이지, 코드는 생각보다 간략해요! 이 코드를 실행시켜주면 아래와 같은 결과를 얻을 수 있습니다.
Download 버튼이 눌려진 채로 Update가 되지 않고 이미지를 다운받는 동안 화면이 죽어버린 것 처럼 보이게 됩니다. 매우, 매우, 매우 불-편하네요. 이러한 문제를 해결해주는 것이 비동기 프로그래밍입니다.
Operation Queue를 사용해보자
위 코드처럼, 데이터를 다운받아오는 부분을 OperationQueue().addOperation 안에 넣어주면 다른 스레드에서 해당 부분을 처리하게 됩니다. 그러나, 맨 마지막 줄에 self.imageView.image = image 부분에서 다음과 같은 유니콘 찌찌맛 에러가 발생하게 됩니다.
해결 방법
UI와 관련된 부분은 메인 스레드에서 처리를 해주지 않으면 저런 에러가 발생하게 됩니다. 따라서, OperationQueue.main.addOperation으로, 메인 스레드에서 처리할 수 있게 따로 다시 코드를 작성해주면 됩니다!
이를 통해 다음과 같은 화면이 죽지 않고 계속 반응을 하는 결과를 얻을 수 있습니다!!
이번 글은 edwith의 부스트코스 iOS 프로그래밍 강의를 들으며 공부한 내용을 정리한 포스팅입니다. 모든 강의와 강의자료가 무료로 개방되어있고, 네이버 아이디로도 수강가능한 만큼, 접근성이 높아서 한 번 들어볼만한 강의라고 생각됩니다. 개발에 대한 기초적인 지식이 있다면, iOS 개발에 입문하기에 정말 괜찮은 강의예요. 프로젝트로 앱을 직접 만들어보면서 배울 수 있기 때문에, Xcode를 사용하는 방법도 쑥쑥 늘구요!
관심이 있으신 분은 아래 링크를 확인해보세요!
https://www.edwith.org/boostcourse-ios/
'Develop > iOS 개발' 카테고리의 다른 글
애플 개발자 아카데미 1기 지원 포트폴리오 (5) | 2022.01.23 |
---|---|
[iOS 앱 개발 - Swift] 스크롤뷰 ScrollView (0) | 2019.09.03 |
[iOS 앱 개발 - Swift] 앱 내에서 앨범 사진 삭제하기 (0) | 2019.08.26 |
Xcode 시뮬레이터에 사진 넣는 방법 (0) | 2019.08.26 |
[iOS 앱 개발 - Swift] Photos Framework 사용하기 (0) | 2019.08.25 |