본문 바로가기

iOS/Swift - UIKit

(8)
[Swift] Modern Concurrency Swift ( 2편 - GCD와 Operation의 특징과 문제점 요약 ) [Swift] Modern Concurrency Swift ( 1편 - Thread Class로 Thread 문제 파헤치기 ) Dispatch : Grand Central Dispatch(GCD) Grand Central Dispatch(GCD)로 알려진 Dispatch 프레임워크는, 시스템에 의해 관리되는 dispatch queues에 작업을 제출하여 멀티코어 하드웨어에서 동시성 작업을 수행하도록 하는 프레임워크입니다. C에 존재하는 libdispath library의 apple implments이며, 다음에 설명할 Operation Queue도 GCD의 위에서 구현되었습니다. GCD가 다루는 모든 작업들은 GCD가 관리하는 FIFO(First in First Out) Queues에 의해 배치됩니다. ..
[Swift] Modern Concurrency Swift ( 1편 - Thread Class로 Thread 문제 파헤치기 ) Swift Concurrency, 그리고 기존의 GCD, OperationQueue 동시성(Concurrency) 프로그래밍이란 여러 작업을 동시에 여러 스레드에서 처리하는 프로그래밍 방식을 뜻합니다. iOS 개발에서 Concurrency는 어플리케이션의 성능 향상 및 UX 향상에 큰 도움을 주며 없어서는 안될 부분입니다. 기존에는 GCD, OperationQueue를 이용하여 이러한 목표를 이룰 수 있었습니다. WWDC 2021에 소개된 Modern Concurrency Swift, Swift Concurrency는 컴파일 타임에 Thread-Safe한 코드를 작성할 수 있도록 도와주고, 특정 상황에 Thread가 멈추지 않고 다른 작업에 할당될 수 있도록 합니다. Swift Concurrency를 본..
[Swift] Notification Center 개념 Notification Center 개발자 문서 A notification dispatch mechanism that enables the broadcast of information to registered observers. 등록된 Observers에 정보의 전달을 허용하는 notification dispatch mechanism이다. class NotificationCenter : NSObject 모든 객체들은 addObserver메서드를 이용하여 알림들(NSNotifcation Objects)을 받기 위해 notification center에 Observer로 등록할 수 있다. 객체를 observer로 등록하면, 그것이 받아야 하는 알림에 따라 구분된다. 그래서 하나의 객체에 여러 개의 다른 알림..
[UIKit] CompositionalLayout으로 당근마켓 게시글 상세보기 뷰 구현하기 CompositionalLayout으로 셀 중첩 대체하기 최근 셀 중첩 방식의 UI 구성이 데이터 전달 및 delegate 사용 측면에서 오버헤드라고 생각하여 CompositionalLayout으로 당근마켓 게시글 상세보기 뷰를 구현했습니다. 해당 뷰가 CompositionalLayout을 적용할 수 있는 양질의 예시는 아니지만, 연습의 의미에서 한 번 구현해 보았습니다. 완성된 뷰는 아래와 같습니다. 실제 당근마켓 앱과 다른 부분이 존재하니 유의해주세요! 먼저 이 뷰에는, 스크롤이 되는 부분과 스크롤이 되지 않는 부분이 있습니다. 네비게이션바와 가장 아래쪽 뷰는 고정하고, 사이에 있는 영역을 스크롤 가능하게 만들어야 합니다. 그리고 그 안쪽에 페이지컨트롤과 함께 스와이프로 페이징을 할 수 있는 뷰가 존..
[Swift] URLSession(1) - 개념 모아보기(URLSession, URLSessionConfiguration, URLSessionTask) ✳️ URLSession 개요 📌 URLSession이란? class URLSession : NSObject An object that coordinates a group of related, network data transfer tasks. 네트워크 데이터 전달 작업에 연관된 일련의 일을 처리하는 그룹 오브젝트이다. URLSession 클래스 및 관련 클래스들은 URLs에 의해 표현되는 엔드포인트에 데이터를 업로드하거나, 다운로드할 수 있도록 하는 API를 제공한다. 또한 URLSession을 통해 iOS 앱이 실행중이지 않을 때에도 백그라운드에서 데이터를 다운로드할 수 있다. URLSessionDelegate나 URLSessionTaskDelegate를 사용하여 일의 완료(task completio..
[Swift 문법] Error Handing(오류처리), try-throw와 do-catch, rethrow, defer ✳️ Error Handling(오류처리) ✨ try-throw / do-catch를 이용한 오류 처리 오류처리란? 프로그램이 실행되는 중에 발생한 오류를 감지하고 각 오류에 알맞은 처리를 부여하여 프로그램을 바른 방향으로 제어하는 것 오류가 발생하는 이유 개발자의 실수, 서버로부터 잘못된 데이터 전달, 데이터에 접근하는 자원이 많을 경우 등등 다양한 이유로 프로그램에 오류가 발생할 수 있다. 오류가 발생했을 때 오류의 유형과 성격에 맞게 처리하여 프로그램이 문제없이 작동할 수 있도록 할 필요가 있다. Swift에서 오류처리의 구조 (1) enum: Error : 발생 가능한 오류를 예상하여 오류를 표현한다 Error 프로토콜을 채택한 열거형으로 주로 표현 (2) try - throw : 오류가 발생함을..
[Swift 객체지향] 2 - 구조체와 클래스의 차이점 ✳️ 구조체와 클래스의 공통점과 차이점 📌 구조체와 클래스의 공통점 프로퍼티 정의 : 값을 저장 메서드 정의 : 기능을 실행 서브스크립트 문법 : 프로퍼티에 접근 가능 이니셜라이저 : 초기화 될 때의 상태를 지정 가능 익스텐션 : 정의 이후 기능 확장 가능 프로토콜 : 특정 기능 실행을 위해 채택 가능 📌 구조체와 클래스의 차이점 클래스만 상속 가능 클래스 인스턴스에만 타입캐스팅 가능 클래스 인스턴스에만 디이니셜라이저 사용 가능 클래스 인스턴스에만 참조 횟수 계산이 적용 이러한 차이점은 구조체와 클래스가 각각 값 타입과 참조 타입이라는 점에서 온다. ✨ 값 타입과 참조 타입 값 타입을 전달 인자로 사용하면 값이 직접 복사되어 전달되고, 참조 타입을 전달 인자로 사용하면 값이 저장되어 있는 주소가 전달된다..
[Swift 객체지향] 1 - 클래스와 구조체의 생성, 초기화, 소멸 ✳️구조체와 클래스 ✨ 개요 구조체와 클래스는 데이터를 용도에 맞게 묶어 표현하려고 할 때 유용하고, 모습과 문법이 서로 비슷하다. 그러나 구조체의 인스턴스는 값 타입이고, 클래스의 인스턴스는 참조 타입이다. 이러한 타입의 차이는 이후 구조체와 클래스의 활용에서 큰 차이를 만들어낸다. ✳️ 구조체 1️⃣ 구조체의 정의 struct 구조체이름 { 프로퍼티와 메서드 } 2️⃣ 구조체 인스턴스의 생성 및 초기화 struct Member { var name: String var age: Int } // 초기화 이후 프로퍼티에 접근하여 수정 가능 var firstMember: Member = Member(name: "Duno", age: 25) firstMember.name = "Ted" firstMember.a..