본문 바로가기

개념퍼먹어

[iOS] Generic을 사용해보자 (feat. ApiManager) 평소 앱을 만들 때 서버와 통신하는 부분은 ApiManager 클래스에 request 종류만큼 메소드를 만들어 사용했다. 그런데 어떤 회사의 기술면접에서 이런 상황이 있었다. 면접관: 보통 api 부분은 어떤 식으로 구현하나요? 나: 중복되는 부분을 제외하고 필요한 api 개수만큼 만듭니다. 면접관: 서로 다른 api가 만 개면 만개 다 만드나요? 나: (? 멘붕...) 네... 면접관: 그렇죠... 돌아는 가죠... 사실 언젠가 잠깐 고민을 했던 부분인데 그때는 왜 그냥 넘겼을까. 면접이 끝나고 집에 돌아오는 길에 T라는 것이 타입에 대해 자유로운 느낌이었다는 게 문득 생각이 났고 집에 오자마자 검색을 해보니 처음 Swift 공부할 때 강의에서 본 Generic이라는 놈이 있었다. 그리고 기존에 만들었.. 더보기
[iOS] DispatchQueue - DispatchQueue.main.sync에 대해 이전 GCD 관련 글에서 Main Queue는 sync로 실행할 경우 데드락에 빠지게 되니 async로만 실행해야 한다고 Apple Doc에 나와있다고 했다. 근데 왜 그렇게하면 데드락에 빠지는건데? 라는 생각이 들었다. 대부분의 블로그에서 그 이유는 Main Thread가 Thread-safe 하지 않기 때문이라고 한다. 일단 이 글을 한 번 쭉 읽어보자. 귀찮으면 다 읽어 볼 필요도 없다. 첫번째 이미지와 첫번째 소제목만 읽으면 된다. 위 이미지는 사용자가 아이폰에서 앱 아이콘을 탭한 후 앱이 실행되기까지의 과정을 보여준다. 첫번째 소제목에는 이렇게 적혀있다. Run Loop is a mechanism that allows threads to process events at any time witho.. 더보기
[iOS] DispatchQueue - Serial, Concurrent 이전 글에서 GCD에 대해 정리했다. 이번에는 DispatchQueue가 어떻게 작동되는지 보자. 1. Serial Queue DispatchQueue의 Serial Queue는 Queue에 담긴 작업을 순차적으로 실행하며, Main Queue 또는 Custom Queue로 사용할 수 있다. Main Queue는 현재 프로세스의 Main Thread와 연결된 DispatchQueue다. 서버로부터 받아온 데이터를 화면에 뿌릴 때 (UITableView나 UICollectionView의 경우 reloadData()) 화면 갱신에 대한 소스가 담긴 클로저를 Main Queue로 보내 처리하는 경우가 많다. Main Queue - async 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16.. 더보기
[iOS] GCD - DispatchQueue GCD는 Grand Central Dispatch의 약자로 굳이 뜻 풀이를 하면 위엄있는 중앙의 파견이라는 뜻인데 우리나라의 국정원 같은 느낌이다. OS단에서 보내는, 그 누구도 중간에서 어떻게 하지 못하는 작업 정도로 이해하면 될 것 같다. 시스템에서 관리하는 DispatchQueue에 작업을 submit하여 멀티 코어 하드웨어에서 코드를 동시에 실행하게 해주는 프레임워크다. 앱 개발을 하다보면 서버에서 많은 데이터를 받거나 멀티미디어 처리와 같은 무거운 작업을 해야할 경우가 생기는데 메인에서 실행시키면 앱이 느려지기 때문에 백그라운드에서 돌리는 편이 좋다. 백그라운드에서 무거운 작업을 하고 메인에서는 화면에 보여지는 부분에 대한 작업을 하면 훨씬 효율 적이다. 이런 경우 GCD를 사용해서 OS에게 M.. 더보기