출처 : fastcampus - 30 개 프로젝트로 배우는 iOS 앱 개발 MVC 디자인 패턴의 장점과 한계 기본적으로 Model, View, Controller 로 이루어져 있는 디자인 패턴이다. Apple 은 MVC 장점을 다음과 같이 정의한다. - 재사용 가능성이 높다 - 인터페이스가 더욱 잘 정의된다. - 쉽게 확장할 수 있다 - Cocoa framework architecture 가 MVC 를 기반으로 하고 있다. 물론 이는 순수한 MVC 패턴이 가지는 장점이다. 하지만 실제 개발에 있어 Cocoa Framework 에서의 MVC 디자인 패턴은 순수하지 못하다. 현실의 Cocoa MVC Cocoa Framework 에서의 MVC 패턴은 UIView 와 UIViewController, 이 둘을 완..
iOS/UIKit
UIStackView UIStackView 는 iOS 개발 과정에서 굉장히 자주 사용되는 Class 이다. 하지만 UIStackView 를 구성할 때 스토리보드 우측 하단의 버튼을 통해서만 구현을 해왔어서, 이번 SnapKit 실습과 함께 UIStackView 와 Subview 에 대하여 공부를 하고자 한다. 이에 앞서 UIStackView 가 무엇인지 알아본다. 출처 : https://developer.apple.com/documentation/uikit/uistackview 공식 문서에 따르면 UIStackView 는 arrangedSubviews 프로퍼티를 통해 모든 뷰의 Layout 을 관리한다. 또한, 각 arrangedSubview 는 arrangedSubviews 리스트의 순서를 기반으로, ..
초기 설정 ① ViewController, main Storyboard 파일 삭제 ② Info plist 의 Main Storyboard file base name 삭제, Application Scene Manifest → .. Storyboard Name 삭제 ③ App 의 홈 화면 역할을 할 ViewController 을 생성한다. import UIKit class HomeViewController: UICollectionViewController { } ④ 생성한 ViewController 을 initial ViewController 로 인지하고 실행할 수 있도록 SceneDelegate 에서 willConnectTo 메서드를 설정한다. func scene(_ scene: UIScene, willC..
어떻게...? 서버로부터 받아오는 JSON 데이터를 바로 사용할수는 없다. 이를 프로젝트 내에서 사용할 수 있는 타입으로 디코딩하여야 한다. 다음은 서버로부터 받아오는 JSON 데이터를 디코딩하는 예시이다. // Parameter 1: JSON을 매핑시켜줄 Codable 프로토콜을 준수하는 사용자 정의 타입 대입 // Parameter 2: 서버에서 응답받는 JSON Data (== data) guard let weatherInformation = try? decoder.decode(WeatherInformation.self, from: data) else { return } Codable 프로토콜을 준수하는 사용자 정의 타입? 말은 복잡하지만 정리하자면 서버로부터 전달 받는 데이터를 저장할 수 있는 구..
일반적인 캐싱 과정 ① Memory Cache 확인 ② 없다면 Disk Cache 확인 ③ Disk Cache 에 있다면 Memory 로 올려서 캐싱 ④ Disk Cache 에 없다면 서버 통신 메모리 캐싱 vs 디스크 캐싱 캐싱에는 Memory Caching (메모리에 존재하는지 체크) 와 Disk Caching (디스크에 존재하는지 체크) 가 있다. · 메모리 캐싱 App 종료 시 메모리가 해제되면서 데이터 리소스가 삭제된다. · 디스크 캐싱 App 을 종료하더라도 데이터가 삭제되지 않으나 앱의 용량이 늘어난다는 단점이 있다. NSCache NSCache 는 그 중에서도 Memory Caching 에 주로 사용되는 클래스이며, Key - Value 형태의 데이터를 임시로 저장하는데 사용되는 가변 Co..
IBOutlet Collection 이란? IBOutlet Collection 은 하나의 뷰에 공통으로 동일한 레이아웃을 구성할 때 활용할 수 있다. IBOutlet Collection 활용 다음과 같은 뷰를 IBOutlet Collection 을 활용하지 않고 구현한다고 가정해보자. ① UIButton 에 대한 IBOutlet 변수 2개, ② UILabel 에 대한 IBOutlet 변수 2개, ③ UILabel 에 대한 IBOutlet 변수 2개, 총 6개의 IBOutlet 변수가 ViewController 상에 그려진다. 또한 이에 대한 레이아웃을 구성할 경우 하나하나 CornerRadius, font, BackgroundColor... 을 지정해줘야 하므로, 코드의 길이가 길어지고, 가독성 또한 낮..
CALayer 의 CA 란? CA 란 Core Animation 의 약자이다. iOS 어플을 사용할 때 화면의 부드러운 전환을 위해 최소 초당 60 프레임을 유지해야 한다. 이를 위해 OpenGL 을 사용하였으나 단순한 작업에도 코드의 양이 너무 커져서, 더 적은 코드로 그래픽을 구현할 수 있는 Core Graphics 를 만들게 되었다. 하지만 Core Graphics 도 low level 작업이라, 더욱 간단하게 사용하고자 만든게 Core Animation 이다. UIView에는 애니메이션, 렌더링, 레이아웃 등을 관리하는 Core Animation 클래스인 CALayer가 있으며, 모든 UIVIew는 layer 프로퍼티를 가지고 있다. UIView 의 CALyer 구성 UIView 는 하나의 CAL..
키보드를 Dismiss 하는 방식에는 // 방식 1 [textField].resignFirstResponder() // 방식 2 self.view.endEditing(true) 두 가지가 있다. 하지만 기능적으로 아무런 차이도 없을까? UITextFieldDelegate 의 resignFirstResponder() 메서드 resignFirstResponder() 메서드를 알아보기 전에 먼저 becomeFirstResponder 메서드를 알아보자. 하단 영상은 각 UITextFIeld 에서 Return 키를 누르면 다음 TextFIeld 로 시점이 옮겨지도록 구현한 View 이다. becomeFirstResponder() 함수는 해당 윈도우에서 이 객체를 First Responder 로 만들 것을 요청하는..
URLSession 이란? 주어진 URL 이 가리키는 endPoint 로부터 자료를 다운로드 받거나 업로드 할 수 있는 API 를 제공하는 클래스이다. URLSession / URLSessionTask / URLSessionConfiguration ? URLSession 에서 가장 중요한 세가지 객체를 이해하고 넘어가보자. URLSession 객체를 사용하여 하나 이상의 URLSessionTask 객체를 생성할 수 있는데, 이러한 URLSessionTask 는 데이터를 Fetch 하여 앱으로 데이터를 전달하거나, 파일을 다운받거나, 원격 장소에 데이터나 파일을 업로드하는 일을 의미한다. 이러한 Session 을 구성하기 위하여 URLSessionConfiguration 객체를 사용하는데, 이 객체는 Ca..
UICollectionView 데이터 항목의 정렬된 컬렉션을 관리하고 커스텀한 레이아웃을 사용해 표시하는 객체. CollectionView 의 구성 - Supplementary View : Section에 대한 정보를 표시 (header-footer. 필수적으로 구현 X) - Cell : Collection View 의 콘텐츠를 표시 UICollectionView, UITableView 의 ContentView UIView 타입으로, Cell 을 구성할 때 Cell Content 를 나타내는 모든 Custom View 를 Content View 에 추가한다. Cell 객체는 BackgroundView 앞에 Content View 를 배치한다. * Decoration View : Collection Vie..