목록iOS (50)
J
Combine에서의 에러 처리: tryMap, catch, replaceErrorCombine을 사용하다 보면 네트워크 요청, JSON 파싱, 사용자 입력 등 다양한 상황에서 에러가 발생할 수 있습니다.Combine에서는 스트림 중간에 에러가 발생하면 스트림이 종료되므로, 이를 적절히 처리할 수 있는 에러 핸들링 기법이 중요합니다.1. 에러가 있는 Publisher vs 없는 PublisherCombine에서는 Publisher가 에러를 발생시킬 수 있는지 여부에 따라 타입이 다릅니다.// 에러를 발생시키지 않는 Publisherlet noErrorPublisher = Just("Hello") // 타입: Just// 에러를 발생시킬 수 있는 Publisherlet errorPublisher = Fail..
Scheduler와 비동기 처리 이해하기Combine을 실제 프로젝트에서 사용하다 보면,"어떤 쓰레드에서 이 작업이 실행될까?", "UI 업데이트는 메인에서 해야 하지 않나?"같은 질문이 생기게 됩니다.이럴 때 사용하는 것이 바로 Scheduler(스케줄러) 입니다.이번 글에서는 Combine에서의 쓰레드 처리와 비동기 흐름 제어 방법에 대해 기초부터 차근히 알아보겠습니다.Scheduler란?Scheduler는 Combine에서 작업을 어떤 스레드/큐에서 실행할지를 제어할 수 있게 해주는 개념입니다.즉, 데이터를 발행하거나 받는 시점의 쓰레드를 지정할 수 있습니다.대표적인 Scheduler 종류Scheduler설명DispatchQueue.main메인 스레드 (UI 업데이트에 필수)DispatchQueue..
1. Subject란?Subject는 Combine에서 Publisher와 Subscriber 역할을 동시에 수행하는 특수한 타입입니다.외부에서 직접 값을 전달할 수 있기 때문에, 사용자 입력, 이벤트 트리거, 수동 제어가 필요한 상황에서 많이 사용됩니다.Combine에서 제공하는 Subject는 2가지타입설명PassthroughSubject현재 값을 저장하지 않고 발행CurrentValueSubject하나의 값을 저장하며 새로운 구독자에게 즉시 전달✅ PassthroughSubject 예제import Combinelet subject = PassthroughSubject()subject .sink { print("받은 값:", $0) }subject.send("Hello") // 출력: 받은 값:..
Combine 핵심 구성 요소 자세히 알아보기Publisher, Subscriber, Operator, Cancellable 앞선 글에서는 Combine의 기본 개념과 흐름을 간단히 소개했었죠.이번 글에서는 Combine을 제대로 활용하기 위해 꼭 이해해야 할 네 가지 구성 요소를 좀 더 깊이 살펴보겠습니다.🟢 Publisher – 데이터의 발행자Publisher는 말 그대로 값을 외부로 전달하는 역할을 합니다.Combine에서 대부분의 동작은 Publisher로부터 시작됩니다.let publisher = Just("Hello")📌 Publisher는 두 가지 이벤트를 전달값 (Value) – 실제 데이터완료 이벤트 (Completion) – .finished 또는 .failure(Error)📌 주..
Combine을 사용하여 동일한 네트워크 요청과 데이터 바인딩을 처리를 예제를 통해 알아보도록 하겠습니다.Combine은 Swift의 선언적 프로그래밍 방식으로 데이터 스트림을 처리하며, 네트워크 통신과 같은 비동기 작업에도 유용합니다.1. Network 통신 결과 Modelimport Foundationtypealias Markets = [Market] // Markets는 Market의 배열struct Market: Hashable, Decodable { let market, koreanName, englishName: String // 각 마켓 정보 enum CodingKeys: String, CodingKey { case market case koreanName..

LLDB란?LLDB(Low-Level Debugger)는 LLVM 프로젝트의 일부로 개발된 디버거입니다. Xcode는 버전 5부터 기존의 GDB(GNU Debugger)를 대신하여 LLDB를 기본 디버거로 사용하고 있습니다.LLDB 시작하기앱을 실행하고 Breakpoint에 걸리거나 pause 시키면 콘솔에 (lldb)가 나타납니다.LLDB 기본 명령어 문법LLDB는 터미널 기반 인터페이스에서 명령어를 입력해 디버깅을 수행합니다.(lldb) command [subcommand] -option "this is argument"LLDB 자주 사용하는 명령어명령어설명breakpoint set -n 함수명특정 함수에 브레이크포인트를 설정breakpoint set -f 파일명 -l 라인번호특정 파일의 라인에 브레..

실행 중인 앱을 일시 정지하려면 브레이크포인트!소스 코드에서 버그가 의심되는 위치를 찾았다면, 해당 줄에 브레이크포인트를 설정하여 디버거가 일시 정지하도록 만들 수 있습니다.버그의 정확한 위치를 모르는 경우에는 심볼릭 브레이크포인트, 이슈 브레이크포인트로 특정 조건에서 중단되도록 설정할 수 있습니다.또한, 반복 작업 중 발생하는 버그나 특정 조건에서만 발생하는 문제를 추적하려면 브레이크포인트에 조건을 지정할 수 있습니다.브레이크포인트 위치 지정하기코드에서 앱 실행을 일시 정지할 위치로 이동한 뒤, 소스 편집기의 행 번호 또는 여백을 클릭하여 브레이크포인트를 설정합니다. 그러면 해당 줄에 브레이크포인트 아이콘이 표시됩니다.브레이크포인트를 끌어서 위아래로 이동하거나 여백 바깥으로 끌어내면 삭제할 수 있습니다..

앱의 생명주기(Application Life Cycle)는 앱이 실행되고 종료되는 과정에서 다양한 상태로 전환되는 일련의 과정을 의미합니다.이러한 상태 전환은 시스템 이벤트에 의해 발생하며, 각 상태에 따라 앱이 수행할 수 있는 작업이 달라집니다.앱의 상태(App State)Not Running앱이 실행되지 않았거나 완전히 종료된 상태입니다.Foreground - Inactive앱이 실행 중이지만 사용자 이벤트를 받을 수 없는 상태입니다.멀티태스킹 창에 진입하거나 전화, 알림 등의 인터럽트로 인해 이 상태로 전환될 수 있습니다.Foreground - Active앱이 실행 중이며 사용자와 상호작용할 수 있는 상태입니다.일반적으로 Inactive 상태를 거쳐 이 상태로 전환됩니다.Background - Ru..

📦 SandBox란운영체제의 커널 수준에서 시행되는 접근 제어 기술로, 외부 프로그램이 보호된 영역에서 동작하게 하여 시스템이 부정하게 동작되는 것을 막는 보안 형태입니다. iOS에서는 각 앱이 설치될 때마다 샌드박스 공간이 생성되어, 해당 앱이 필요한 데이터를 저장하고 다른 앱과의 데이터 공유를 제한합니다. App Store에서 유통되는 App들은 모두 App SandBox를 적용시켜야만 합니다.🧪 샌드박스가 적용되지 않은 앱의 경우샌드박스가 적용되지 않은 앱은 실행하는 사용자와 동일한 모든 권한을 가지며, 사용자가 접근할 수 있는 모든 리소스에 접근할 수 있습니다.따라서, 해당 앱이나 연결된 프레임워크에 보안 허점이 발생하면 해커는 이를 악용하여 앱을 제어하고, 앱에서 접근 가능한 리소스에도 접근..
🎣 DI (Dependency Injection) — 의존성 주입개념객체가 자신이 사용할 객체(의존성)를 직접 생성하지 않고 외부에서 주입받는 방식.객체 간의 결합도를 낮추고, 테스트나 확장성을 높일 수 있음.Swift 예제protocol NetworkService { func fetchRandomNumber() async -> Int?}class RealNetworkService: NetworkService { func fetchRandomNumber() async -> Int? { let urlString = "http://www.randomnumberapi.com/api/v1.0/random" guard let url = URL(string: urlString)..