본문 바로가기

# 02

[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를 캡처할 때..
[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️..
[Flutter] Shorebird 코드 푸시(Code Push) 란? 리액트 네이티브로 개발하는 주된 원인이 바로 코드 푸시입니다. 코드 푸시는 개발자가 앱을 심사 없이 바로 업데이트할 수 있도록 하는 클라우드 서비스입니다. 이를 이용하여 사용자에게 영향을 미치는 버그를 신속하게 수정할 수 있고 새로운 기능이나 성능 개선도 즉각적으로 반영할 수 있습니다. 앱을 삭제 후 재설치 하지 않고 앱 스토어로 이동하지 않고 업데이트가 가능합니다. 단, 네이티브 코드 변경 시에는 스토어를 통해 배포해야 하며 코드 푸시를 통한 업데이트만 진행하고 스토어 배포를 하지 않는다면 신규 사용자는 스토어에서 다운로드한 후 다시 첫 실행에 코드 푸시 업데이트도 해야 한다는 단점이 있어 스토어를 통한 출시도 주기적으로 진행하는 것이 좋습니다. Shorebird 란..