TIL 25일 차 - [Swift] DispatchQueue 트러블 슈팅 정리 문제 상황MVVM 구조에서 ViewModel이 비동기로 데이터를 처리한 뒤에 ViewController에서 UI를 업데이트해야 하는 상황// VM에서 데이터가 변경되었을 때 View 업데이트viewModel.onDataUpdated = { self.updateView()} 해당 코드 문제 원인1. UI 작업은 메인 스레드에서만 가능한데 백그라운드 스레드(Viewodel)에서 UI를 변경하려고 함2. 강한 참조로 인한 메모리 누수 가능성이 있음(클로저는 기본적으로 self를 강하게 참조하여 ViewModel이 ViewController를 계속 잡고 있는 상태가 됨) 해결 방법1. 메인 쓰레드에서 UI 업데이트(UI 관련 ..
TIL 24일 차 - [Swift] 동시성 프로그래밍 Concurrency 동시성 프로그래밍 Concurrency한 번에 여러 작업을 동시에 수행하는 것을 목표로 하는 프로그래밍 방식 - 하나의 프로세스(실행 중인 앱 하나)에는 여러 개의 Thread(그 앱 안에서 실제로 일을 하는 일꾼들)가 존재하며, 각 Thread에서 병렬 작업을 수행 할 수 있음- 별도로 지정하지 않으면 메인 스레드에서 작업이 진행됨 메인 스레드- UI작업을 할 수 있는 유일한 스레드.. ex) 버튼 클릭 처리, UILabel 텍스트 변경, 화면 전환, 애니메이션- 별도로 스레드로 분리하지 않는다면 모든 작업은 기본적으로 MainThread가 실행됨- 메인 스레드에서 모든 작업을 처리할 경우 속도 지연 및 성능 저하 문제가 ..
TIL 21일 차 - 스토리보드 -> 코드베이스로 환경설정하기코드베이스(Code-based)란?스토리보드(XIB) 같은 인터페이스 빌더를 사용하지 않고, 코드로만 화면(UI)을 구성하는 방식 실무에서 코드베이스를 선호하는 이유!1. Git 협업이 편함- 머지 충돌 적음2. 유지 보수가 쉬움3. 재사용/구조화가 쉬움- 모듈화 1. 스토리 보드 삭제내비게이터 영역의 storyboard 파일을 Delete 하고 Move to Trash 한다. 2. info.plist에서 스토리보드 연결 끊기네비게이터 영역의 Info.plist 선택하고 (Command+F)로 main 검색 후 [Key: Storyboard Name, Value: Main] 선택 후 백스페이스 눌러 삭제한다. 3. Build Setting에서..