분류 전체보기

BehaviorSubject와 BehaviorRelay 를 사용하는 것의 차이를 공부해보자 📚 👇 BehaviorSubject와 BehaviorRelay는 RxSwift에서 자주 사용하는 값 보관형 스트림(시퀀스)이지만, 몇 가지 중요한 차이점이 있다! ✅ BehaviorSubject특징RxSwift의 Subject 계열 타입 (Observer + Observable)초기값이 필요하며, 이후 .onNext()로 값을 방출함현재 값을 유지하고 있고, 새로운 구독자에게는 마지막으로 방출된 값을 즉시 전달함.onError(), .onCompleted() 호출 가능let subject = BehaviorSubject(value: "초기값")subject.onNext("A")subject.subscribe(o..
BehavioSubject 에서 onNext 와 accept 의 차이를 이해해보자.두 메서드는 RxSwift 에서 값을 방출하는 방법으로 사용된다. ✅ onNext vs accept 차이점1. onNext (기본 메서드)onNext는 Observable에서 값을 방출할 때 사용된다.BehaviorSubject 외에도 PublishSubject, ReplaySubject 등에서도 동일하게 사용된다.onNext를 호출하면 구독자에게 해당 값을 즉시 전파한다.let subject = BehaviorSubject(value: [1, 2, 3])subject.onNext([4, 5, 6]) // 값이 [4, 5, 6] 으로 업데이트 됨 2. accept → RxRelay 에서 제공accept는 BehaviorRe..
· TIL✏️
발생한 문제configure 실행되지 않음// 현재 구조let data: Datalet dataDetail: PublishSubjectinit(data: Data) { self.data = data fetchData() // 초기화 시점에 바로 호출 }fetchData() [ dataDetail.onNext(data)} 확인 내용1. ViewModel 제대로 생성되었는가 ? Yes let data = firstData[indexPath.row]let viewModel = DetailViewModel(data: data)let vc = DetailViewController(viewModel: viewModel)navigationController?.pushViewController(vc, ..
CAShapeLayer와 UIBezierPath를 사용하면 UIView의 모양을 자유롭게 커스터마이징할 수 있다. UIBezierPath → 곡선이나 직선을 조합해 경로(Path)를 생성하는 객체CAShapeLayer → 경로(Path)를 그릴 수 있는 레이어🔗 UIBezierPath 공식 문서 addCurve(to:controlPoint1:controlPoint2:) | Apple Developer DocumentationAppends a cubic Bézier curve to the path.developer.apple.com 🔗 CAShapeLayer 공식 문서 CAShapeLayer | Apple Developer DocumentationA layer that draws a cubic Bezi..
· TIL✏️
문제점 발견⭐️🔗☀️ 사용 api 5 day weather forecast - OpenWeatherMap openweathermap.org 1) API 에서 제공되는 icon 과 dt_txt 간의 시간 불일치의 문제를 발견했다.시간별 데이터를 보여줄 때 예를 들어, 오전 6시인데 d(낮☀️) 아이콘이 아닌 n(밤🌙) 아이콘이 나오는 경우가 발생했다.이 문제점은 OpenWeatherAPI 에서 제공하는 icon 값은 UTC 기준으로 설정된 시간에 맞춰 제공되는데, API 에서 제공하는 dt_txt 값도 UTC 기준의 시간이었다. (Docs로 확인)그래서 이를 변환하지 않아서 실제 한국 시간과 불일치하는 문제가 발생한 것이다. 해당 데이터를 화면에 업데이트하니 시간에 맞지 않는 icon 표시되는 문제  ..
compactMap이란?compactMap은 배열의 각 요소를 변환하여 새로운 배열을 반환하는 함수옵셔널(Optionals)을 처리하는 메서드각 요소에 대해 변환 작업을 할 수 있고, 반환 결과가 nil인 경우는 배열에서 제거하고, nil이 아닌 값만 반환.예를 들어, nil을 걸러내거나, 특정 조건에 맞는 값들만 추출하고 싶을 때 유용하다.let numbers = ["1", "2", "three", "4"]let result = numbers.compactMap { Int($0) }// result: [1, 2, 4] // "three"는 변환할 수 없어서 제외✅ map과 차이점map: 변환 후 nil을 포함한 배열 반환compactMap: 변환 후 nil 을 제거한 배열 반환let numbers = ..
CoreLocation을 사용해서 현재 위치 데이터를 받아와보자 📍 1. CoreLocation 설정 (현재 위치 받아오기)CoreLocation 프레임워크를 사용해서 사용자의 위치 정보를 가져올 수 있다. ✅ Info.plist 설정 위치 권한 요청을 위한 키를 추가해야 한다.NSLocationWhenInUseUsageDescription앱 사용 중 현재 위치를 확인하기 위해 필요합니다.NSLocationAlwaysUsageDescription항상 현재 위치를 확인하기 위해 필요합니다. 2. LocationManager 클래스 생성위치 정보를 관리하는 클래스를 만들어 현재 위치를 불러오기.import CoreLocationimport Combineclass LocationManager: NSObjec..
Alamofire와 Combine의 조합으로 API 요청하는 방식을 알아보자. 1. Alamofire + Combine의 조합이란?Alamofire: 네트워크 요청을 간편하게 해주는 라이브러리.Combine: 비동기 데이터를 스트림으로 처리하는 프레임워크.이 둘을 조합하면 네트워크 요청을 더 깔끔하고 선언적으로 처리할 수 있다.즉, 네트워크 요청 → 응답 처리 → UI 업데이트 흐름이 자연스럽게 이어진다. 2. 기본적인 Alamofire + Combine 패턴Alamofire는 publishDecodable이라는 메서드를 제공해서 Combine과 쉽게 연동할 수 있다. ✅ Step 1. APIManager에서 Publisher 반환// Combine으로 API 요청 (Publisher 반환)func fe..
· TIL✏️
오늘은 진행하던 프로젝트의 ViewController에서 MVVM 패턴과 Combine을 적용해 리팩토링 과정을 진행했다. MVVM (Model-View-ViewModel) 패턴을 적용하면 코드의 구조화와 유지보수가 쉬워지고, 테스트가 용이해진다.또한, Combine을 사용하면 데이터 흐름을 반응형으로 관리할 수 있어, 데이터 변경 시 UI가 자동으로 업데이트된다는 장점이 있다.  ✔️ 기존 구조 문제점기존의 ViewController는 네트워크 호출과 UI 업데이트를 모두 담당했다. 네트워크 호출을 통해 날씨 데이터를 받아오고,데이터를 받은 후, 바로 UI 요소(라벨, 이미지 등)을 업데이트이렇게 모든 로직이 ViewController에 몰려 있으면 유지보수가 어렵고, 테스트도 힘들다.   ✔️ MVV..
Combine을 통한 데이터 바인딩ViewModel에서 @Published와 sink, assign을 활용해 뷰에 데이터를 구독하고 실시간으로 UI에 반영할 수 있다. @Published, sink, assign의 사용 방법에 대해 알아보자. 1. @Published:ObservableObject 프로토콜을 채택한 클래스에서 사용.값이 변경될 때마다 뷰(구독자)에게 알림을 보내 UI를 자동으로 업데이트.@Published var temperature: Double = 0.0 2. sink(receiveCompletion:receiveValue:):퍼블리셔에서 값을 받을 때 사용하는 구독 메서드.네트워크 요청이 성공하거나 실패할 때 동작을 정의.WeatherAPIManager.shared.fetchCurr..
yujjne
'분류 전체보기' 카테고리의 글 목록