iOS
-
[iOS] - 선언형 UI와 명령형 UIiOS/iOS 2025. 8. 7. 16:30
오늘은 제목 그대로 두개의 차이가 궁금해서 포스팅하게 됐다.사실 선언형, 명령형이라는 말을 아무렇게나 남용한 것 같은데,,, 제대로 알지 못하면서 이 말을 쓰는 건 양심에 찔려서 생각난 김에 깊숙히 파고 들어보기로 했다. 선언적 UI “무엇을 그릴지 선언한다.” 대표적인 예로 SwiftUI가 있다.SwiftUI에서는 @State, @Binding, @StateObject와 같은 프로퍼티 래퍼를 사용해 상태 변수를 선언한다. 이 상태 변수는 Button, TextField 등의 컴포넌트를 통해 변경되며, 상태가 바뀌면 그에 따라 UI가 자동으로 다시 렌더링된다. 여기서 핵심은 “어떤 컴포넌트를 쓸지”보다, “어떤 상태를 다룰지”에 중점을 둔다는 것이다. UI는 결국 상태의 함수로 볼 수 있다.우리는 상태..
-
[iOS] - Swift Concurrency: Task, await, Executor, actor, detachediOS/iOS 2025. 5. 19. 16:58
Swift 5.5부터 도입된 Swift Concurrency는 GCD를 넘어서 더욱 구조적이고 안전한 비동기 프로그래밍을 가능하게 해준다.이번 글에서는 Swift Concurrency의 핵심 개념부터 GCD와의 비교, 내부 동작 방식, 언제 어떤 API를 써야 하는지까지 이야기식으로 풀어본다.🎯 핵심 용어 정리개념설명Task비동기 작업의 실행 단위 (코루틴 기반)await비동기 작업이 완료될 때까지 일시 중단ExecutorTask를 스케줄링하고 실행시키는 내부 엔진actor스레드 안전을 보장하는 참조 타입 객체Task.detached구조화되지 않은, 독립된 컨텍스트에서 실행되는 Task🔁 GCD vs Swift Concurrency항목GCDSwift Concurrency구조비구조적구조적 (Struct..
-
[iOS] - GCD(Grand Central Dispatch): 비동기, 병렬 처리, 스레드 관리iOS/iOS 2025. 5. 19. 13:04
Swift로 iOS 앱을 개발하다 보면 DispatchQueue, async, global() 같은 GCD 관련 코드를 자주 마주친다.하지만 그 내부에서 어떤 일이 벌어지고 있는지는 단순히 "비동기 처리"라고만 알고 넘어가기 쉽다.이번 포스트에서는 GCD의 작동 원리부터 멀티코어, 컨텍스트 스위칭, 스레드 풀, TCB까지 CS 관점에서 가장 깊이 있게 정리해보겠다.📌 GCD란?GCD(Grand Central Dispatch)는 Apple이 제공하는 C 기반의 멀티코어 병렬 처리 저수준 API다.✅ 주요 특징스레드 풀 기반의 경량 비동기 처리멀티코어 활용 최적화비동기 + 병렬 처리 모두 가능스레드 직접 생성 없이 자동으로 최적화된 실행🧱 기본 구조: Dispatch Queue큐 종류설명Serial Qu..
-
[UIKit] - 스크롤에 따라 이미지뷰를 줄이고 사라지게 만드는 방법 (UIKit + SnapKit)iOS/UIkit 2025. 5. 17. 13:52
많은 앱에서 상단 이미지(썸네일 또는 배너)가 스크롤에 따라 자연스럽게 축소되고 사라지는 UI를 볼 수 있다.대표적으로는 Apple Music, App Store의 상세화면 등이 있다. 이번 글에서는 SnapKit + UIScrollViewDelegate를 활용해이미지뷰의 높이와 투명도를 스크롤 위치에 따라 동적으로 조절하는 인터랙션을 구현해봤다. 🎯 구현 목표스크롤하면 이미지뷰가 자연스럽게 축소된다.충분히 스크롤하면 완전히 사라진다.스크롤이 하단에 도달하면 원래 높이로 돌아가지 않도록 제어한다.SnapKit 사용 시 발생할 수 있는 제약 충돌을 방지한다. 🧱 View 구성 구조DetailView├── artworkImageView (썸네일)├── scrollView│ └── contentStac..
-
[Swift] - Swift의 Task, @MainActor, Task.detached 정리: 언제, 왜, 어떻게 써야 할까?iOS/SWIFT 2025. 5. 3. 11:55
📚 목차 개요@MainActor란?Task {} vs Task.detached {} 차이메모리와 CPU 관점 차이병렬 작업 취소 & 완료 감지 (withTaskGroup)정리1. 개요 Swift의 Concurrency는 async/await, Task, Actor 등을 통해 안전하고 효율적인 비동기 처리를 제공한다.하지만 Task {}, Task.detached {}, 그리고 @MainActor 사이의 차이점과 사용법은 정확히 이해해야 제대로 활용할 수 있습다. 이 포스트에서는 이 세 가지를 중심으로, 실제 동작 원리, 메모리/CPU 관점 성능 차이,그리고 TaskGroup을 통한 취소 및 완료 감지 방법까지 정리할 것이다. 2. @MainActor란? @MainActor는 특정 함수, 속성, 클래스..
-
[Swift] - Swift에서 클래스 내부 구조체의 메모리 위치와 성능 차이iOS/SWIFT 2025. 5. 3. 10:13
✍️ 목차 개요클래스와 구조체의 메모리 차이클래스 내부의 구조체는 어디에 저장될까?구조체 복사와 성능 영향정리 1. 개요 Swift는 값 타입(struct)과 참조 타입(class)을 명확히 구분하는 언어임.이번 포스트에서는 클래스 내부에 포함된 구조체 인스턴스가 메모리상 어디에 저장되는지,그리고 구조체 복사가 성능에 어떤 영향을 미치는지에 대해 살펴보자. 2. 클래스와 구조체의 메모리 차이 🔹 클래스 (Reference Type)인스턴스는 Heap에 저장됨변수는 Heap에 있는 객체의 **포인터(reference)**를 stack에 저장ARC(Automatic Reference Counting)로 메모리 관리됨 🔹 구조체 (Value Type)인스턴스는 Stack에 저장됨값이 복사되어 전달됨 (..
-
[RxSwift] - 단방향 Vs 양방향iOS/RxSwift 2025. 4. 24. 00:02
단방향 바인딩- View → ViewModel- ViewModel → View 이렇게 한 방향으로만 데이터가 흐름 MVVM에서는 가장 권장되는 구조.// View → ViewModeltextField.rx.text.orEmpty .bind(to: viewModel.inputText) .disposed(by: disposeBag)// ViewModel → ViewviewModel.outputText .bind(to: label.rx.text) .disposed(by: disposeBag) - 디버깅이 쉽고, 테스트하기 쉬운 구조 양방향 바인딩이란?View와 ViewModel이 서로 값을 주고받는 구조. Rx에서는 흔히 이렇게 작성됨.textField.rx.text.orEmpty ..
-
[RxSwift] - MVVM패턴과 RxSwift 사용iOS/RxSwift 2025. 4. 3. 13:17
팀 프로젝트 중 RxSwift를 적용한 반응형 프로그래밍에 관심이 생겼다.기존에는 SwiftUI+Combine을 활용한 프로젝트를 해왔었는데 SwiftUI는 특성 상 바인딩을 직접 구현할 필요가 없었기 때문에 UIkit을 반응형 코드로 작성한다는 것에 궁금증이 생겼다. MVVM 패턴은 익숙하다.하지만 내가 모르는 기술(RxSwfit)과 새로운 프레임워크(내 기준에선 UIkit)를 사용해 프로젝트에 적용시켜보고 싶었다. 가장 처음으로 팀원 분의 도움으로 Json데이터를 fetch하는 메서드를 ViewModel에서 불러와 Model에 적용시켜, View와 바인딩 하는 로직을 RxSwift로 구현해봤다. 하나씩 톺아보자 ViewModelimport Foundationimport RxSwiftimport RxC..