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

🍎 Apple 101

[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

[Swift] 순열과 조합 구현

지난 포스팅에서 Queue를 구현해봤는데요 알고리즘 문제에는 순열 및 조합도 가끔 쓰이죠! 그래서 이번엔 순열과 조합을 구현해봤습니다. 순열 (Permutation) 순열은 전체에서 중복없이 순서를 고려해 n개를 배열하는 경우의 수입니다. 해당 특성에 맞게 DFS를 사용해 접근했습니다. 따라서 Stack과 재귀함수 둘 모두를 사용할 수 있습니다. Stack 사용 func permutation(_ array: [T], _ n: Int) -> [[T]] { var result = [[T]]() if array.count < n { return result } var stack: [([T], [Bool])] = array.enumerated().map { var visited = Array(repeating:..

🍎 Apple/Swift 2022.04.25

[Swift] Queue (Deque) 구현

최근 Swift로 알고리즘 문제를 해결하고 있습니다. 그런데 Swift에는 Queue(Deque)가 없어 종종 불편할 때가 있더라구요 그래서 한번 직접구현해봤습니다. Swift로 구현한다는 것에 목적이 있는 포스팅이기 때문에 Queue와 Deque에 대한 설명은 생략하겠습니다. 참고 : https://velog.io/@seri_ous/Swift-%ED%81%90-Swift-Algorithm-Club-%EB%B2%88%EC%97%AD 구현 class Queue { var array: [T?] var head = 0 var isEmpty: Bool { return count == 0 } var count: Int { return array.count - head } var first: T? { if isEm..

🍎 Apple/Swift 2022.04.25

[UIKit] dequeueReusableCell (withIdentifier:for:) vs (withIdentifier:)

tableView에서 Cell을 재사용하기 위해 사용되는 메서드인 dequeueReusableCell에는 두가지 형태가 있습니다. dequeueReusableCell(withIdentifier:for:)과 dequeueReusableCell(withIdentifier:)가 그것인데요. 이 두 메서드의 정확한 차이는 무엇일까요? 하나는 indexPath를 함께 파라미터로 받고 있고, 하나는 받지 않고 있습니다. 두 메서드의 기능이 똑같다면 굳이 indexPath 넣어주는 메서드를 사용할 필요가 있을까요? 무언가 특별한 기능이 있으니까 사용하는 것 아닐까요? 일단 애플 공식문서 찾아보기 일단 문서의 글을 읽어봅시다. func dequeueReusableCell(withIdentifier:for:) : reu..

🍎 Apple/Question 2022.04.18

[UIKit] UITableView 기초부터 다시 살펴보기

안녕하세요 이누입니다. UITableView, UICollectionView 둘다 상황에 따라 많이 사용하는 View죠. 그런데 저는 지금까지 프로젝트에서 적용하기에만 급급해서인지 사용과정 및 원리가 머릿속에서 정리되어 있다는 느낌이 없었습니다. 그래서 이번기회에 둘 다 정리를 해보려고 합니다. 오늘은 먼저 TableView입니다! 이번 포스팅은 쓰다보니 좀 길어져서 목차도 첨부합니다. 아래 순서대로 설명할거예요. UITableView란? UITableView 생성하기 UITableViewCell, UITableViewDataSource Cell Reuse? UITableViewDelegate (이하 내용은 모두 코드베이스를 기준으로 설명되어 있습니다.) 1. UITableView란? iOS의 UITab..

🍎 Apple/UIKit 2022.04.17

[iOS Design Pattern] Coordinator

Coordinator Pattern Coordinator 패턴은 ViewController가 보유하던 책임 중 Navigation과 관련된 부분을 다른 인스턴스에서 책임지도록 하는 패턴입니다. 기존의 ViewController에서 직접적으로 화면전환을 시행하는 방식은 다음에 띄워질 다른 ViewController에 대해 기존 ViewController가 알고 있어야 하는 구조입니다. 이는 ViewController 인스턴스 간에 심한 커플링을 발생시킵니다. 이를 해결한 것이 Coordinator 패턴입니다. 모든 ViewController는 Coordinator 인스턴스만 보유할뿐, 다른 ViewController 인스턴스를 직접적으로 보유하지 않습니다. 그저 Coordinator에게 요청할 뿐입니다. ..

🍎 Apple/Patterns 2022.04.12

[iOS Architecture] VIPER

안녕하세요 이누입니다. 오늘은 많이 들어만보고 뭔지는 아직도 모르는 VIPER 패턴에 대해 학습해봤습니다. VIPER 패턴? 먼저 VIPER 패턴입니다. VIPER는 View, Interactor, Presenter, Entity, Router의 약자입니다. 이름대로 이 5개의 요소로 UI 구성 패턴을 정의합니다. 각 요소들은 위와 같이 상호작용하며 자신의 역할을 수행합니다. 각 요소의 역할은 다음과 같습니다. View ViewController를 포함해 화면에 보여지는 모든 것들이 여기에 포함됩니다. Presenter에 대한 참조를 보유합니다. Presenter에서 호출하여 자신을 변경할 수 있는 메서드를 내부에 보유합니다. (다른 방식으로 Presenter의 이벤트를 확인해 직접적으로 처리하도록 할 ..

🍎 Apple/Patterns 2022.04.11