본문 바로가기
300x250

전체 글235

동시성 프로그래밍 (5) - GCD 사용 시 주의해야할 사항 GCD를 사용할 때에 주의 할 부분과 응용방법! 1.  반드시 메인큐에서 처리해야하는 작업우리는 화면을 그리고 그 화면에 필요한 데이터를 가져오고 가공하는 여러 작업들을 하게 된다.그리고 별도로 스레드로 작업을 분산하지 않는다면 보통은 대부분의 작업이 메인스레드에서 처리가 되는데 메인 스레드는 앱의 UI를 관리하고 사용자와의 상호 작용을 처리하는 매우 중요한 스레드이다. 따라서 UI관련 작업이나 애니메이션 그리고 사용자가 텍스트를 입력할 때 처리해야하는 작업 등은 반드시 메인스레드에서 처리되도록 해야한다.왜 메인 스레드에서 UI 작업을 해야 할까?1) UI 일관성 유지: 여러 스레드에서 동시에 UI를 변경하면 예기치 못한 결과가 발생할 수 있다. 메인 스레드에서만 UI를 변경함으로써 UI 상태를 일관되게.. 2024. 8. 21.
동시성 프로그래밍 (4) - GCD의 종류와 특성 1) main메인 이라는 이름 답게 단 한개가 존재하는 메인스레드를 이용한다serial로 동작하며 보통은 별도 작업을 해주지 않으면 메인스레드에서 처리가 된다print("task")이렇게 단순한 출력 코드 조차도 DispatchQueue.main.sync { print("task")}내부적으론 위와 같이 동작하고 있는 것! 2) globalconcurrent로 동작하며 총 6가지의 옵션을 지정하여 우선순위를 결정할 수 있다. 중요도가 높은 종류의 큐 사용시 iOS가 알아서 작업을 여러 스레드로 배치하고 배터리를 더 집중해서 사용하도록 한다. 만약 낮은 중요도의 큐 안에 더 높은 중요도의 큐 작업을 보내면 작업 수준은 자동으로 더 높은 중요도의 수준으로 변경된다.let queue = DispatchQue.. 2024. 8. 12.
동시성 프로그래밍 (3) - GCD/Operation에 앞서 Synchronous(동기) vs. Asynchonous(비동기)thread1 번에 쌓이는 task들을 대기열(큐)에 보내고 동기 또는 비동기로 처리할지 정하게 되고대기열에 보내진 task들은 자동으로 다른 스레드들로 분산되어 동기 또는 비동기로 처리된다. 동기로 처리 하게 되면 하나의 task가 끝나고 다음 task를 실행하여 순차적으로 큐에 있는 작업들을 처리한다.비동기로 처리 하게 되면 여러 task가 동시에 큐에 있는 작업들을 처리한다.  Serial(직렬) VS Concurrency(동시)이러한 큐에는 두 가지의 특성이 있는데 바로 직렬과 동시 직렬?스레드 하나에 작업을 보내고 순서가 중요한 작업을 처리할 때 사용된다. 동시?여러 스레드를 사용하여 작업을 처리하며 몇 개의 스레드로 분산할지는 시.. 2024. 8. 9.
동시성 프로그래밍 (2) - GCD/Operation에 앞서 그렇다면 동시성 프로그래밍이 필요한 이유는 무엇일까?예를 들어 테이블뷰에 다운로드 받은 이미지들을 보여주어야 할 때하나를 다운 받고 그 다음 것을 다운 받고 끝나면 또 다음 것을 받고..이런식으로 이미지를 받아와 테이블뷰에 보여주도록 처리 한다면, 한참 시간이 지나야만 모든 데이터들을 테이블뷰에서 볼 수 있게 된다. 바로 이럴 때!처리해야하는 task들을 스레드를 사용하여 빠르게 처리하기 위함이다.이미지들을 동시 다발적으로 다운로드 작업을 처리 하도록 한다면 훨씬 빠르게 테이블 뷰를 완성 시킬 수 있을 것이다. task를 스레드로 분산시키는 방법은task를 queue(대기행렬)에 보내 놓기만 하면된다.이렇게 하면 iOS는 알아서 여러 스레드로 분산시켜 동시에 일을 처리 할 수 있게 해준다. 대기열로 작업.. 2024. 7. 24.
객체지향의 사실과 오해 처음 이 책을 알게된건 개발 학원에서였다.다들 유명한 책이고 객체에 대해 잘 알려준다는 평이 많아서 읽기 시작했는데.이제 막 개발을 시작한 나에게는 무슨 말인지 도저히 이해할 수가 없더라.그래서 2장 정도까지 읽고 더 이상 읽지 않았다.그렇게 몇 년이 지나고 나서야 다시 읽어보게 되었다. 이 책에서 가장 유명한 것은 객체의 역할, 책임, 협력에 대해 '이상한 나라의 엘리스'의 등장 인물들의 관점에서 설명 해주는 부분이다.각 캐릭터들은 자신들의 역할과 책임을 가지고 있고 이들이 소통하면서 답을 얻는 과정을 객체간의 협력이라 말한다.SOLID원칙이라던지 캡슐화, 다향성 등 객체의 중요한  특징들도 함께 설명해주어서 객체지향의 장점들의 특징을 함께 이해할 수 있었다. 처음 개발을 시작했을 때 읽었을 때에는 이.. 2024. 7. 20.
동시성 프로그래밍 (1) - GCD/Operation에 앞서 미루고 미루던 동시성에 대해 공부를 시작했다.사실 그동안 아무 생각 없이 써오던 DispatchQueue...대강 그때그때 필요에 의해, 조금씩. 스레드는 뭐구나 동기 비동기는 이런거구나~ 감으로만 알았달까...이제와서야 동시성 처리에 대한 깊이있는 처리를 해보게 되면서, 진작에 좀 공부할 걸 후회를 시작으로 인강을 먼저 찾아보았다.몇 년 전 나온 async await에 대한 내용도 좋지만, 기본기 먼저 다져야겠다는 생각으로 GCD와 Operation을 선택했고.앨런님의 강의를 결재했다. iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션앨런(Allen) | 동시성(Concurrency)프로그래밍 - iOS프로그래밍에서 필요한 동.. 2024. 7. 16.
디버그, 릴리즈 용 사용 값 구분하기 SDK 사용할 때 Key 값들을 아무생각 없이 static let debugKey = 1static let releaseKey = 2이렇게 작성했다가 뒤늦게 아차 싶었다.그래서 디버그와 릴리즈 빌드시 사용하는 값들을 분리하여 읽어 올 수 있는 방법에 대해 찾아보았는데,info.plist에 변수를 작성하여 구분 하는 방법과 클래스를 작성하여 구분하는 방법이 있는 것 같았다.그러나 결국 info.plist를 사용하더라도 파일을 생성하고 값을 불러오는 코드를 작성해야 해서 클래스를 만들어 사용해보기로 했다! protocol APIKey { var aKey: String { get } var bKey: String { get }}디버그와 릴리즈용 클래스 모두 동일한 프로퍼티를 갖도록 프로토콜로 선언해준 뒤 .. 2024. 7. 8.
네이버 로그인 연동 - 3 / 3 2024.04.08 - [iOS/iOS] - 네이버 로그인 연동 - 1 / 3 2024.04.08 - [iOS/iOS] - 네이버 로그인 연동 - 2 / 3 네이버 앱도 등록 했고! 프로젝트에 환경 설정도 마무리 했다면! 이제 네이버 로그인을 해봅시다. 여기서 주의 할 점은 제가 겪은 바로는 이 로그인 동작 코드는 ViewController타입의 파일에서만 실행이 되더라구요? 사실 귀찮아서 이래저래 .. 안해봤어여 우린 일단 방법을 아는게 중요하니까! 시작해봅시다. 로그인 화면 파일로 이동해볼게요 import NaverThirdPartyLogin class LoginVC: UIViewController { private let naverInstance = NaverThirdPartyLoginConnect.. 2024. 4. 8.
네이버 로그인 연동 - 2 / 3 2024.04.08 - [iOS/iOS] - 네이버 로그인 연동 - 1 / 2 네이버 개발자 사이트에 내 애플리케이션이 등록이 되어 있으니 이제 프로젝트 설정을 해볼게요. 프로젝트 TARGETS - Info에 key-value를 등록해줍니다. 그리고 밑에 URL Types에 네이버 로그인을 추가해줄게요 identifier를 저는 naverLogin으로 설정해주었고 이전 글에서 URL Schemes를 프로젝트에도 등록 해준다고 했었죠?! 네이버 개발자 사이트에 내 애플리케이션 - API 설정에 보면 그때 적어줬던 URL Schemes와 동일하게 적어줄게요 그리고 네이버 로그인은 Objective-c로 작성되어 있다고 해여. 그래서 환경설정 파일에 직접 저희 애플리케이션 환경을 반영해주어야 합니다. 프로젝트.. 2024. 4. 8.
300x250