본문 바로가기

[iOS] Combine vs RxSwift 정리: iOS 리액티브 프로그래밍 흐름 한눈에 보기 Swift에서 비동기 데이터 흐름을 다룰 때 사용하는 대표적인 리액티브 프레임워크는 Combine과 RxSwift입니다.이 글에서는 Combine의 핵심 구성 요소와 데이터 흐름을 먼저 요약하고, RxSwift와의 차이점도 함께 정리해볼게요. 🔁 Combine의 데이터 흐름 구조@Published var value: Int = 0$viewModel.value .map { "\($0)" } .sink { print("값: \($0)") } .store(in: &cancellables) Combine에서는 다음과 같은 흐름으로 데이터가 전달됩니다: 순서역할설명1@Published속성 값의 변경을 감지 가능한 Publisher로 전환2Publisher값이 시간에 따라 방출됨3Operatormap..
[iOS] iOS GCD 핵심 요약 ✅ sync vs async 항목syncasync실행 방식동기 (기다림)비동기 (즉시 다음 코드 진행)스레드 생성❌ 없음✅ 가능 (큐에 따라)블로킹✅ Blocking❌ Non-blocking예시queue.sync {}queue.async {} ✅ Serial vs Concurrent Queue 항목Serial QueueConcurrent Queue실행 방식순서대로 하나씩병렬로 여러 개 동시에순서 보장✅ 보장❌ 보장 안됨대표 예시DispatchQueue(label:)DispatchQueue.global() ❌ Deadlock 예시 (피해야 할 패턴) DispatchQueue.main.sync { DispatchQueue.main.sync { print("이 코드는 deadlock 발생") }}..
[iOS] GCD란? ✅ GCD란?**GCD (Grand Central Dispatch)**는 iOS와 macOS에서멀티스레드 작업을 쉽고 효율적으로 처리하기 위해 Apple이 만든 API 🧠 왜 쓰는가?앱이 UI를 멈추지 않고 백그라운드에서 작업할 수 있도록 하기 위해복잡한 Thread 직접 생성 없이, 작업을 큐에 넣는 것만으로 병렬 처리 가능 🔧 대표 사용법DispatchQueue.global().async { // 백그라운드 작업 let data = loadImage() DispatchQueue.main.async { // UI 업데이트는 메인 스레드 imageView.image = data }} 🧱 구성 요소 요소설명DispatchQueue작업을 실행할 큐 (main, global ..
[iOS] iOS에서 strong, weak, unowned의 차이점 iOS는 ARC(Automatic Reference Counting) 기반 메모리 관리를 사용합니다.객체 간 참조가 순환될 경우 메모리 누수가 발생할 수 있어서,strong, weak, unowned를 적절히 사용해 순환 참조를 방지해야 합니다. strong은 기본 참조 방식으로, 참조 횟수를 증가시켜 객체 생존을 유지합니다. 대부분의 경우에 사용되며, 순환 참조가 없을 때 적절합니다.weak은 참조는 하지만 참조 카운트를 증가시키지 않고, 객체가 해제되면 자동으로 nil이 됩니다. 주로 delegate 패턴에서 사용되며, 선언 대상이 옵셔널이어야 합니다.unowned도 참조 카운트를 증가시키지 않지만, nil이 되지 않는다고 보장되는 관계에 사용합니다. 예를 들어, 클로저 내부에서 self를 캡처할 때..
Flutter vs Android vs iOS 메모리 관리 Flutter는 단일스레드 가비지 콜렉션, Android는 메모리 공유 멀티 스레드 GC, iOS는 ARC를 통해 메모리를 관리한다. 자동 해제이지만 리소스가 가장되면 먼저 삭제해야 한다. 🧠 ARC vs GC 구조 요약ARC (iOS) vs GC (Android / Flutter) 의미Automatic Reference CountingGarbage Collection해제 방식참조 카운트가 0이 되면 즉시 메모리 해제사용되지 않는 객체를 GC가 주기적으로 수거언제 작동함?객체 참조가 사라지는 즉시GC가 스케줄 따라 수시로 작동 (즉시 아님)누가 관리함?컴파일러가 코드에 retain/release 삽입런타임 GC 엔진이 heap을 스캔순환참조 방지직접 weak or unowned 사용GC가 순환 참조도..
[iOS] Xcode Instruments Xcode의 Instruments는 앱이 렉 걸리거나 메모리 누수 의심될 때, FPS 떨어질 때 사용할 수 있는 개발 툴이다. Time Profiler (CPU 사용량 분석)Allocations (메모리 사용량 추적)Leaks (메모리 누수 감지)Core Animation (FPS, 레이어 렌더링 시간 확인)Network, Energy, System Trace 등 이 있다. Xcode > Open Developer Tool > Instruments Activity Monitor 선택 + Instrument 클릭해서 추가 가능 (Core Animation FPS 검색) 추가 된 모습 왼쪽 상단의 빨간 재생버튼 클릭
[iOS] Tuist 보호되어 있는 글입니다.
[SwiftUI] 회전된 Text를 VStack에 올바르게 정렬하는 방법 struct RotatedTextTestView: View { var body: some View { VStack() { Text("Horizontal text") Text("Vertical text").rotationEffect(.degrees(-90)) } }} SwiftUI에서 Text를 회전(rotationEffect)하면 원래 배치된 위치 기준으로 회전되므로,👉 VStack 내부에서 회전한 크기를 반영하지 않고 배치되는 문제가 발생할 수 있다.👉 이를 해결하기 위해 PreferenceKey를 사용하여 뷰의 크기를 측정하고, 회전 후의 올바른 위치를 계산해야 한다.     ✅ Text 회전 후 올바르게 정렬하는 방법1️..