본문 바로가기

분류 전체보기

(360)
NotificationCenter NotificationCenter직역하면 알림센터로, Observer에게 Notification 객체를 전달하는 싱글톤 객체입니다.델리게이트 패턴은 일대일 송수신에 장점이 있지만, 이 객체는 일대다, 다대다 통신의 장점을 갖고 있습니다. Notification /// A tag identifying the notification. public var name: Notification.Name /// An object that the poster wishes to send to observers. /// /// Typically this is the object that posted the notification. public var object: Any? /// St..
iOS Combine CombineCombine은 비동기 및 이벤트 처리 코드를 작성하는데 사용되는 프레임워크 입니다.이전에 반응형 프로그래밍으로 RxSwift를 사용해 본 적이 있는데, 애플에서 개발한 Combine도 있다고 하여 개념을 정리해보고자 합니다  Publisher: 값을 생성하고 전달하는 객체입니다.public protocol Publisher { associatedtype Output associatedtype Failure: Error func receive(subscriber: S) where S : Subscriber, Self.Failure == S.Failure, Self.Output == S.Input} Subscriber: Publisher로부터 데이터를 수신하고 처리하는 객체입니..
비동기 프로그래밍 DispatchQueue 비동기 프로그래밍은 개발에 있어서 중요한 부분입니다.하나의 앱은 한개의 프로세스가 순차적으로 이루어지는 것이 아닌 다양한 작업이 동시다발적으로 이루어지기 때문에 이러한 작업을 효율적으로 나누고 한번에 처리하도록 설계해야합니다.설계하는데 있어서 중요한 비동기 프로그래밍에 대해서 적어보고자 합니다. 동기 / 비동기동기(Synchronous): 작업이 완료될 때까지 대기한 후, 작업이 완료되면 다음 작업을 실행비동기(Asynchronous): 작업 완료를 기다리지 않고 바로 다음 작업을 실행   직렬(serial) / 병렬(concurrent)직렬(Serial): 순차적으로 진행병렬(Concurrent): 동시에 진행 이름에서 의미를 찾아 볼 수 있지만, 직렬 병렬을 나누는 이유는 작업이 들어가는 큐에는 직렬..
순환 참조 class 와 같은 인스턴스는 참조 형식 인스턴스 입니다.두 개의 참조 형식 인스턴스가 서로 강한 참조(Strong reference)를 한다면 순환 참조가 발생합니다.이는 두 인스턴스가 메모리에서 해제되어도 서로에 대한 참조가 해제되지 않기 때문에 메모리에 남게되고 심해지면 메모리 릭 현상이 발생합니다.이러한 순환참조를 해결하기 위해 참조할 때 weak, unowned 키워드를 사용합니다. 먼저 순환참조가 발생하는 예시입니다.// Person Classclass Person { var name: String var pet: Pet? init(name: String) { self.name = name print("Person init") } de..
Swift 자료구조 배열- 데이터를 순차적으로 저장하는 구조- 인덱스를 사용해 특정위치의 요소에 접근할 수 있음- 특정 인덱스를 통해 접근하는 것은 빠르지만(O(1)), 삽입/삭제 과정은 오래걸린다(O(n)) 예시  큐선입선출의 형식인 데이터구조 (FIFO)- Enqueue: 큐 맨 뒤에 요소 추가- Dequeue: 큐 맨 앞의 데이터를 반환- Peek: Front에 위치한 데이터 값 반환- Front: 큐의 앞부분 (가장 먼저 들어온 데이터가 위치함)- Rear: 큐의 뒷부분 ( 가장 최근에 들어온 데이터가 위치함) dequeue하는 과정에서 removeFirst() 메소드를 이용한다면 시간복잡도가 O(n)이 걸리게된다.이를 해결하기위해 index를 이용해 front부분을 확인하여 데이터를 반환하는 방법도 있지만,reve..
Swift 구조체와 클래스 구조체와 클래스는 비슷하면서 서로 다른 성질을 갖고 있습니다.먼저 공통점으로는 다음과 같습니다.- 변수나 상수를 사용하여 값을 저장하는 프로퍼티로 정의할 수 있음- 함수를 사용하여 기능을 제공하는 메서드로 정의할 수 있음- 속성값에 접근할 수 있는 방법을 제공하는 서브스크립트를 정의할 수 있음- 객체를 원하는 초기 상태로 설정해주는 초기화 블록(init)을 정의할 수 있음- 객체에 함수적 기능을 추가하는 확장 구문을 사용할 수 있음- 특정 형식의 함수적 표준을 제공하기 위한 프로토콜을 구현할 수 있음 이와 같은 공통점이 있지만, 구조체에서는 안되지만 클래스에서는 할 수 있는 기능이 다음과 같이 있습니다.- 클래스의 특성을 다른 클래스에게 물려줄 수 없음- 실행 시 컴파일러가 클래스 인스턴스의 타입을 미리..
URLSession 번역 https://developer.apple.com/documentation/foundation/urlsession URLSession | Apple Developer DocumentationAn object that coordinates a group of related, network data transfer tasks.developer.apple.com  URLSession네트워크 데이터 통신 작업과 관련된 그룹을 조정하는 객체 해당 클래스는 URL로 표시된 엔드포인트에서 데이터를 다운로드하거나 업로드 하기 위한 API를 제공한다.또한 앱이 실행되지 않거나 일시정지된 시점에서도 백그라운드에서 다운로드할 수 있는 기능을 제공URLSessionDelegate와 URLSessionTaskDelegate를 ..
Fetching website data into memory Fetching website data into memoryReceive data directly into memory by creating a data task from a URL sessionURLSession에서 DataTask를 생성하여 데이터를 메모리로 직접 수신한다.For small interactions with remote servers, you can use the URLSessionDataTask class to receive response data into memory (as opposed to using the URLSessionDownloadTask class, which stores the data directly to the file system)원격서버와 소규모 상호 작용의..