UIKit 환경에서 Combine 프레임워크를 활용해 상태를 자동으로 바인딩하는 방법을 배워보려 합니다.. 예제로는 내배캠 iOS 앱 개발 입문 1주차 강의의 Counter 앱을 활용했습니다. 기존에는 Delegate 패턴으로 사용자 이벤트를 처리했다면, 이번엔 Combine을 통해 모델의 상태가 바뀔 때 UI가 자동으로 업데이트되는 구조를 구현해보려 합니다.Combine이란?Combine은 Apple이 WWDC 2019에서 발표한 반응형(Reactive) 프로그래밍 프레임워크입니다. Swift 언어로 작성된 코드에서 다양한 이벤트 스트림(데이터, 네트워크 응답, 사용자 인터랙션 등)을 하나의 방식으로 처리할 수 있도록 만들어졌습니다.Combine은 Swift 개발자가 다음과 같은 상황에서 강력하게 활용..
내배캠 iOS 앱 개발 입문 1주차 강의에서 제공된 Counter 앱을 기반으로, UIKit에서 가장 널리 쓰이는 디자인 패턴 중 하나인 Delegate(델리게이트) 패턴을 학습해보려고 합니다. Delegate 패턴이란?Delegate는 말 그대로 위임이라는 뜻을 가지고 있습니다. iOS에서 Delegate 패턴은 한 객체가 발생시킨 이벤트를 다른 객체에게 처리 위임하는 구조를 의미합니다.Apple 공식 문서에 따르면A delegate acts on behalf of, or in coordination with, another object.- Apple Devpedia - DelegationDelegate 패턴을 언제 사용하나?View는 사용자 이벤트(버튼 클릭 등)를 감지할 수 있지만, 로직 처리까지 ..
프로젝트를 진행 중 하나의 코드 리뷰를 받았습니다.해당 피드백을 본 후 모델을 생성할때도 그 용도에 맞게 프로토콜을 채택해야될 것 같다고 생각이 들었습니다 Swift에서 네트워크 통신이나 로컬 파일 저장을 하다 보면 흔하게 마주치는 프로토콜이 있습니다. 바로 Codable, 그리고 그를 구성하는 Encodable, Decodable입니다. 이 글에서는 Apple 공식 문서를 기반으로 이 프로토콜들의 의미와 차이점, 그리고 언제 어떤 걸 써야 할지 정리해보겠습니다.Codable이란?typealias Codable = Encodable & Decodable Codable은 Swift가 제공하는 타입 에일리어스로, Encodable과 Decodable을 동시에 채택한 것을 의미합니다. 즉, 이 타입은 JSON..
비동기 처리, 언제 쓰고 왜 써야 할까?내배캠 앱 개발 입문 주차 과제를 해결하던 중 나온 고민이였다.동기 처리란?비동기 처리(Asynchronous Execution)는 어떤 작업을 기다리지 않고, 다른 작업을 동시에 처리할 수 있도록 해줍니다.Swift에서는 GCD(Grand Central Dispatch)를 사용해 비동기 처리를 구현할 수 있습니다. Dispatch | Apple Developer DocumentationExecute code concurrently on multicore hardware by submitting work to dispatch queues managed by the system.developer.apple.com비동기 처리가 중요한가?iOS 앱은 대부분 단일 메인 스..
LLDB란?LLDB는 Apple이 GDB를 대체하기 위해 LLVM 기반으로 새롭게 개발한 디버거입니다.Xcode 5부터 기본 디버거로 채택되어, 모든 기존 및 신규 프로젝트에서 자동으로 LLDB를 사용하게 되었습니다.LLDB는 GDB보다 강력하고 빠르며, 데이터 검사 및 흐름 제어에 있어 현대적인 기능을 제공합니다.LLDB의 주요 특징1. Xcode와의 완벽한 통합LLDB는 Xcode 안에서 완전히 통합되어 작동합니다. UI 디버깅 도구와 디버깅 콘솔에서 LLDB 명령어를 직접 사용할 수 있습니다.2. 익숙한 명령어 세트기존 GDB 사용자를 위해 LLDB는 GDB와 유사한 명령어들을 제공합니다.또한 별칭(alias)을 지정하거나, 단축 명령어를 만들어 손쉽게 사용할 수 있습니다.3. 확장 가능한 디버거L..
Swift 5.9에서는 복사 불가능한 타입(Noncopyable Types)이 새롭게 도입되었습니다. 이 기능을 통해 특정 구조체(struct)나 열거형(enum)을 복사할 수 없도록 만들어, 고유한 소유권을 명확히 관리할 수 있습니다.왜 도입됐을까? 기존 Swift의 값 타입(struct, enum)은 항상 복사가 가능했습니다. 즉, 같은 데이터를 여러 번 복사하여 사용할 수 있었죠. 이는 편리하지만 때론 부적합합니다. 예를 들어, 파일 핸들이나 네트워크 소켓 같은 리소스는 하나의 고유한 소유권만을 요구하며, 복사가 가능하면 리소스 관리가 어려워지기 때문입니다.이 문제를 해결하기 위해 Swift 5.9부터는 복사를 금지하는 기능을 제공합니다.어떻게 사용하나? 복사 불가능한 타입을 정의할 때는 타입 선언..