[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🍎 Apple 97

[iOS Design Pattern] Decorator

Design Pattern - Decorator 주어진 상황 및 용도에 따라 특정 객체에 책임을 덧붙이는 패턴입니다. 기능 확장이 필요한 경우 서브클래싱 대신 사용할 수 있습니다. 기본구조 Decorator 패턴의 기본적인 구조입니다. Component : Component와 Decorator 측에서 구현할 인터페이스입니다. Decorator : Component를 상속하면서, 내부적으로 Component를 보유하고 있습니다. Concrete Component : Component를 구현한 구현체로, Decorate를 적용할 기본 객체입니다. Concrete Decorator : Decorator를 구현할 구현체입니다. 솔직히 아직까지는 단순한 상속과 뭐가 그렇게 다른건지 잘 와닿지 않습니다. 이를 Sw..

🍎 Apple/Patterns 2022.05.18

[Swift] URLSession Cahce Policy

Network Caching 네트워크 작업은 고비용의 작업입니다. 따라서 매번 동일한 데이터를 받아올 때마다 요청과 응답을 수행하게된다면 시간 및 리소스를 상당히 낭비하게 됩니다. 그래서 필요한 것이 Caching입니다. Caching을 사용하면 불필요한 작업을 최대한 줄여서 시스템의 성능을 향상시킬 수 있습니다. URL Loading System을 통해 이러한 Caching에 설정을 수행할 수 있습니다. Cache Store 및 Cache Policy를 변경할 수 있습니다. URL Loading System에서는 4가지 Cache Policy를 제공합니다. useProtocolCachePolicy : protocol 특성에 따른 기본 캐시정책 (서버에서 전달한 Cache-Control Header를 그..

🍎 Apple/Swift 2022.05.18

[iOS] Remote data를 가져올 때 Data(contentsOf:)를 사용하면 안되는 이유

Remote data를 가져올 때 Data(contentsOf:)를 사용하면 안되는 이유 일단 이 메서드는 동기적으로 작동한다는 것이 기본입니다. 따라서 현재작업중인 스레드의 모든 작업을 해당 작업을 수행하는 동안 멈추게할 위험이 있습니다. 이는 사용성에 매우 악영향을 주겠죠? 그럼 DispatchQueue.global().async로 감싸주면 어떨까요? 이러면 스레드 문제도 해결되었으니 Data(contentsOf:)를 사용해도 괜찮은 것일까요? 아예 안된다고 못박을 수는 없겠지만, 권장하지는 않습니다. 먼저 main 스레드를 멈추는 문제는 해결했지만 여전히 GCD의 제한된 작업스레드 중 하나를 묶는 셈이 됩니다. 이는 직접적이진 않아도 간접적으로 성능에 영향을 줍니다. 또한 URLSession과 달리..

🍎 Apple/Question 2022.05.17

[RxSwift] Rx로 네트워크 통신하기

Rx로 네트워크 통신하기 RxSwift에서 Network를 처리하는 방법은 크게 3가지입니다. Observable 직접 생성하기 RxCocoa가 제공하는 extension 사용하기 외부 라이브러리 사용하기 이들 중 외부 라이브러리를 제외한 두 방법에 대해 알아보겠습니다. Observable 직접 생성하기 enum ApiError: Error { case badUrl case invalidResponse case failed(Int) case invalidData } 에러코드는 위와 같다고 가정합니다. struct Result: Codable { let list: [Model] let code: Int let message: String? static func parse(data: Data) -> [Mod..

[Swift] URL Loading System

URL Loading System URL을 통해 네트워크에 존재하는 서버와 통신하는 기술입니다. 이에 포함된 프레임워크는 높은 수준의 API를 제공하기 때문에 이것만으로 서버연동, 다운로드, 업로드 기능을 구현할 수 있습니다. URLSession 이 시스템에서 가장 중요한 것이 URLSession입니다. 이를 통해 네트워크 연결을 설정하고 요청과 응답을 처리할 수 있습니다. URLSession은 네가지 Session 타입을 가집니다. Shared : 기본 설정을 기반으로 단순한 네트워크 요청을 수행할 수 있습니다. Default : 세션을 직접 구성할 수 있습니다. Degation을 제공하기 때문에 세부적인 제어도 가능합니다. 해당 세션을 통해 전송된 응답은 Disk 및 Memory에 캐싱됩니다. Eph..

🍎 Apple/Swift 2022.05.12

[Swift] CodingKeys / Custom CodingKeys

CodingKeys CodingKeys struct Model: Codable { var name: String var number: Int } // JSON File { "myName" : "Inu", "number" : 5 } 우리는 주로 Codable Protocol을 채택하여 모델을 구성합니다. 이 때 구현하려는 구조체의 속성과 JSON Data의 Key값이 일치해야 정상적으로 Decoding됩니다. 그런데 사실 구현하려는 구조체의 속성과 JSON Data의 Key값이 일치하는 경우는 거의 없습니다. 위의 예시의 name과 myName처럼 다른 것이 일반적입니다. 이 때 사용되는 것이 CodingKeys 입니다. struct Model: Codable { var name: String var nu..

🍎 Apple/Swift 2022.05.12

[Swift] JSON Encoding / Decoding

JSON Encoding / Decoding JSON JavaScript Object Notation의 약자입니다. 네트워크를 통해 데이터를 주고받을 때 사용되는 표준 포맷입니다. 우리는 Swift 데이터를 JSON 데이터로 변환하고, JSON 데이터를 Swift 데이터로 변환할 필요가 있습니다. 이를 Encoding 및 Decoding이라고 합니다. Dictionary와 같이 Key-Value 형태를 가지며, 전체 데이터가 일반 Text로 구성되어 있습니다. JSONEncoder(Decoder) let encoder = JSONEncoder() do { let jsonData = try encoder.encode(instance) } catch { print(error) } let decoder = J..

🍎 Apple/Swift 2022.05.12

[Swift] ATS (App Transport Security)

iOS - ATS (App Transport Security) ATS란 iOS 9에 도입된 보안기능 TLS, AES, SHA-2를 사용하여 구성되어 있습니다. 기본적으로 암호화되지 않은 정보(HTTP)를 허용하지 않습니다. (HTTPS 사용권장) 설정을 수정하면 HTTP 접속을 허용할 수 있지만 앱 심사에 통과되지 못할 가능성이 있기 때문에 일반적으로 권장되지는 않습니다. 이를 수정해야하는 '정당한' 이유가 있어야 합니다. 설정 방법 아래는 ATS 설정을 수정하는 방법입니다. info.plist에서 주로 설정을 관리합니다. info.plist에서 Add Row를 클릭해 새로운 열을 생성합니다. App Transport Security Settings을 입력합니다. 여기에 미리정의된 Key와 Value를 ..

🍎 Apple/Swift 2022.05.12

[RxSwift] RxCocoa로 TableView 구현하기

안녕하세요 이누입니다. 오늘은 RxCocoa를 기반으로 TableView를 구현하는 방법에 대해 정리해보았습니다. 개인적으로 UITableViewDataSource같은 Protocol을 채택하고 구현하지 않아도 되어서 좋더라구요! 그럼 시작합니다. RxCocoa - TableView 구현 기존에 TableView의 Cell을 구현하기 위해서는 UITableViewDelegate 객체 활용이 필수적이었습니다. 하지만 RxCocoa를 활용하면 DataSource 없이 메서드를 기반으로 Cell 구현이 가능합니다. RxCocoa의 UITableView+Rx.swift를 살펴봅시다 public func items (_ source: Source) -> (_ cellFactory: @escaping (UITab..

[iOS Design Pattern] Factory Method

Factory Method Pattern Factory 패턴은 객체를 생성하는 모듈인 'Factory'를 만들어놓고 요청에 따라 객체를 생성하는 패턴입니다. Factory Method 패턴은 어떤 객체의 인스턴스를 생성할지 서브 클래스에서 결정하도록 합니다. 객체 생성을 처리하는 팩토리를 프로토콜로 관리하여 실질적인 생성을 캡슐화하는 것이 가능합니다. 일반적으로 Creator, Concrete Creater, Product, Concrete Product로 구성됩니다. Creator에서는 추상적 정보만 파악하고 있고, Concrete Creator에서 객체 생성에 대한 결정을 수행합니다. 아래는 간단한 구현예시입니다. // Product protocol Product { func hello() } Pro..

🍎 Apple/Patterns 2022.04.26