iOS

·iOS/Swift
안녕하세요, 루피입니다. 오늘은 값과 참조에 관해 정리해보는 시간을 가져보려합니다. 가장 기본적인 내용이지만, 가장 중요한 개념이기에 이번 기회에 제대로 짚고 넘어가면 좋을거 같습니다. 바로 시작합니다.값 타입 vs 참조 타입값 타입은 데이터를 전달할 때 값을 복사 해서 전달합니다.예를 들어, 구조체 인스턴스를 다른 변수에 할당하면, 전혀 별개의 인스턴스가 생성되어 원본과는 완전히 독립적으로 작동하게 됩니다.참조 타입은 값을 전달하는 것이 아니라 그 값이 저장되어 있는 메모리 주소 를 전달합니다. 그래서 클래스 인스턴스를 다른 변수에 할당하더라도 실제로는 같은 객체를 가리키게 됩니다. 즉, 둘 중 하나에서 값을 바꾸면 나머지에도 영향을 끼치게 되는 것이죠.Swift 의 타입Swift에서 모든 타입은 크게..
·iOS/Swift
안녕하세요, 루피입니다. 이번 포스팅은 Parallelization 2번째 시간입니다. 오늘은 Swift의 내장 동시성 시스템을 활용하여 데이터 변환 작업을 효율적으로 수행하는 방법에 대해 알아보겠습니다. 특히 비동기 및 병렬 처리와 결합하는 방법에 대해 정리 해보려합니다. 바로 시작합니다.왜 비동기 컬렉션 처리가 필요한가?우리가 일상적으로 작성하는 코드의 대부분은 본질적으로 일련의 데이터 변환으로 구성됩니다. 네트워크 응답, 사용자 입력, 데이터베이스 쿼리 등 다양한 형태의 데이터를 받아서 로직을 실행하고, 최종적으로 저장하거나 사용자에게 표시하는 과정이죠.하지만 기존의 동기적 처리 방식은 성능상 한계가 있습니다.// 기존 동기 처리 - 순차적 실행class FavoritesManager { fu..
·iOS/Swift
안녕하세요, 루피입니다.이번 포스팅은 지난 Task에 대한 포스팅을 마무리하고 새롭게 시작하는 Parallelization을 정리하려합니다. 벙렬 작업은 주로 컬렉션 내에서 이루어지기에 제목을 위와 같이 만들었습니다. 바로 시작합니다.Swift의 동시성 시스템을 사용하여 여러 작업을 병렬로 실행하기Swift의 내장 동시성 시스템의 이점 중 하나는 여러 비동기 작업을 병렬로 수행하는 것을 훨씬 쉽게 만들어준다는 것입니다. 이는 별도의 부분으로 나눌 수 있는 작업의 속도를 크게 향상시킬 수 있습니다.이 글에서는 이를 수행하는 몇 가지 다른 방법과 각 기법이 특히 유용한 경우를 살펴보겠습니다.동시성(Concurrency) vs 비동기(Parallelism)우선 동시성과 비동기의 차이를 먼저 확인하고 넘어가겠..
·iOS/Swift
안녕하세요, 루피입니다.이번 포스팅은 Swift Concurrency 3번째 시간입니다. 오늘은 Task를 이용한 메모리관리에 대한 정리를 해보겠습니다. 바로 시작합니다.async/await 사용 시 메모리 관리앱의 메모리를 관리하는 것은 비동기 코드의 맥락에서 특히 까다로운 일입니다. 다양한 객체와 값들이 비동기 호출을 수행하고 처리하기 위해 시간에 걸쳐 캡처되고 유지되어야 하기 때문입니다. Swift의 비교적 새로운 async/await 구문은 많은 종류의 비동기 작업을 더 쉽게 작성할 수 있게 해주지만, 이러한 비동기 코드에 관련된 다양한 작업과 객체들의 메모리를 관리할 때는 여전히 상당히 주의해야 합니다.암시적 캡처async/await의 흥미로운 측면 중 하나는 비동기 코드가 실행되는 동안 객체와..
·iOS/Swift
안녕하세요, 루피입니다.이번 포스팅은 Swift Concurrency 2번째 시간입니다. 오늘은 Task의 지연 실행에 대해 깊이 있게 다뤄보겠습니다. 바로 시작합니다.왜 Task 지연이 필요할까?다음과 같은 상황에서 지연 실행이 필요합니다.검색 디바운싱: 사용자가 타이핑을 멈춘 후 0.3초 뒤 검색 실행로딩 스피너 지연 표시: 빠른 작업 시 UI 깜빡임 방지툴팁 표시 지연: 사용자가 버튼 위에 1초간 머물 때만 표시네트워크 재시도: 실패 후 일정 시간 대기 후 재시도이런 패턴들은 사용자 경험을 크게 개선하며, 팀 협업 환경에서 일관된 UX를 제공하는데 중요한 역할을 합니다.Task 지연 시키기대부분의 경우, 우리는 다양한 비동기 작업들이 생성된 후 가능한 빨리 시작되기를 원하지만, 때로는 실행에 약간의..
·iOS/Swift
안녕하세요, 루피입니다.이번 포스팅부터 Swift Concurrency에 대해 학습해보려 하는데요, 이전에 한번 정리한 적이 있지만, 좀 더 체계적인 방법으로 정리해보고자 합니다.Swift 5.5부터 도입된 Swift의 내장된 Concurrency 시스템은 가볍지만 효율적인 동시성 코드를 작성할 수 있도록 도와줍니다.기존 GCD와 OperationQueue의 복잡성을 해결하고, 더 안전하고 직관적인 비동기 프로그래밍을 가능하게 합니다.기존 방식의 한계점기존 GCD 방식에서는 다음과 같은 복잡성이 있었습니다.// 기존 GCD 방식의 문제점DispatchQueue.global().async { let data = self.fetchData() DispatchQueue.main.async { [we..
·iOS/SwiftUI
안녕하세요, iOS 개발하는 루피입니다. 오늘은 SwiftUI View와 Modifiers에 대해 공부하면서 궁금했던 some View, 특히 some 키워드에 대해 좀 더 자세히 알아보겠습니다. 바로 시작합니다.1. some View를 왜 써야 하는가?지난 글에서 "some View는 View 프로토콜을 준수하는 어떤 객체이지만, 정확히 어떤 타입인지는 말하고 싶지 않다"라고 간략하게 설명했는데요. 그래 편하겠지... 근데 뭐가 어떻게 편한거야? 그리고 왜 써야하는지 잘 와 닿지가 않더라고요... 그래서 이 부분에 대해 더 자세히 살펴보겠습니다.1) 편리성과 코드 가독성만약 우리가 some View를 사용하지 못한다면 어떻게 될까요?만약 Text를 반환하고 싶다면... struct ContentView..
·iOS/SwiftUI
안녕하세요, iOS 개발하는 루피입니다.오늘은 SwiftUI의 근간을 이루는 핵심 개념인 뷰와 모디파이어에 대해 깊이 있게 알아보려고 합니다.바로 시작합니다.1. SwiftUI가 View에 Struct를 사용하는 이유UIKit이나 AppKit을 사용해 보셨다면, 두 프레임워크에서는 뷰를 클래스로 구현한다는 것을 알고 계실 겁니다. 그러나 SwiftUI는 다른 접근 방식을 취합니다. SwiftUI에서는 뷰를 구조체로 구현하며, 여기에는 몇 가지 중요한 이유가 있습니다.1) 성능적 이점구조체는 클래스보다 단순하고 빠릅니다.UIKit에서는 모든 뷰가 UIView라는 클래스에서 파생되며, 이 클래스는 배경색, 위치 제약조건, 렌더링 레이어 등 수많은 속성과 메서드를 포함하고 있습니다. 상속의 특성상 UIView..
·iOS/SwiftUI
안녕하세요, iOS 개발하는 루피입니다! 오늘은 공식문서를 바탕으로 StateObject에 대해 정리해 보는 시간을 가져보려 합니다. 바로 시작합니다.StateObject란?StateObject는 SwiftUI에서 참조 타입 객체를 관리하기 위한 프로퍼티 래퍼로, iOS 14부터 도입되었습니다.(iOS 17 이후부터는 참조 타입도 @Observable 매크로와 함께 @State로 관리하는 것을 Apple이 권장하고 있습니다.) ObservableObject 프로토콜을 준수하는 참조 타입 객체의 생명주기를 관리하고, 뷰가 업데이트될 때도 객체의 상태를 안정적으로 유지하는 역할을 합니다.@MainActor @frozen @propertyWrapper @preconcurrencystruct StateObjec..
·iOS/SwiftUI
안녕하세요, iOS 개발하는 루피입니다. 오늘은 공식문서를 바탕으로 Bindable에 대해 정리해보는 시간을 갖겠습니다. 바로 시작합니다.Bindable이란?@Bindable은 Observable 객체의 변경 가능한 속성들에 바인딩을 생성할 수 있게 해주는 프로퍼티 래퍼입니다.이 프로퍼티 래퍼를 사용하면 Observable 프로토콜을 준수하는 데이터 모델 객체의 변경 가능한 속성에 바인딩을 만들 수 있습니다. 예를 들어, 아래 코드에서는 @Bindable로 book 입력을 감싸고 있습니다. 그런 다음 TextField를 사용해 책의 title 속성을 변경하고, Toggle을 사용해 isAvailable 속성을 변경합니다. 이때 $ 문법을 사용하여 각 속성에 대한 바인딩을 컨트롤에 전달합니다.@Observ..
kimsangjunzzang
'iOS' 카테고리의 글 목록 (2 Page)