출처 : 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
우선 순위 설정 - priority, setContentCompressionResistancePriority, setContentHuggingPriority ① Priority AutoLayout 을 구현할 때 hugging Priority, compressionResistancePriority 값을 설정하였을 것이다. SnapKit 에서도 이를 priority 를 통해 줄 수 있다. button.snp.makeConstraints { $0.top.equalTo(label.snp.top).priority(600) } 위와 같이 상수로도 줄 수 있지만, 열거형을 사용하여 low, medium, high 등으로 case 를 구분지어서 priority 를 부여하는 것이 가독성이 높아 보인다. enum Prio..
pdateConstraint, remakeConstraint, Reference 타입 변수 할당 SnapKit 에서는 기존의 제약 조건을 수정하기 위한 몇 가지 방식이 있다. ① updateConstraint setNeedsUpdateConstraints 메서드 혹은 여러 trigger 에 의해 여러번 호출될 수 있다. updateConstraint 는 새로운 레이아웃을 줄 수 있는 remakeConstraint 와는 다르게 makeConstraints 에 들어가 있던 것들을 기준으로 수정이 가능하다. button.snp.updateConstraint { $0.width.equalTo(100) } ② remakeConstraint updateConstraint 와 비슷하지만, remakeConstrain..
equalTo, lessThanOrEqualTo, greaterThanOrEqualTo, 상수 값 부여 ① 여러 경우 - 동일한 경우 : .equalTo - 작거나 동일한 경우 : .lessThanOrEqualTo - 크거나 동일한 경우 : .greaterThanOrEqualTo ② 상수값 부여 또한 다른 뷰들의 비교 뿐만이 아니라 상수 값을 부여할 수 있다. button.snp.makeConstraints { $0.height.equalTo(30) } ## 이때 left, right, centerX, centerY 등등과 같은 alignment 설정에서는 constant value 를 부여할 수 없다. 만약 부여한다면 SuperView 에 대한 설정으로 인식된다. inset, offset, multip..
해석 순서 다음은 contentsStackView 에 SnapKit 라이브러리를 사용하여 Auto Layout 을 주는 예제 코드이다. contentStackView.snp.makeConstraints { $0.leading.trailing.equalToSuperview().inset(30) } 해석 순서는 다음과 같다. leading · trailing 을 주겠다 (□□ 에다가 주겠다) → Superview 와 동일하도록(△△ 과 동일하게) → inset 을 30만큼 주면서 (♤♤ 의 추가 요소) Anchor ① Auto Layout 을 줄 수 있는 요소 button 이라는 UIButton 을 superView 로 부터 20 의 padding 값을 주는 코드를 어떻게 구현할 수 있을까? let butt..
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..
GCD / Operation 의 선택 sync (동기) 와 async (비동기) 차이점을 배우면서, Task 2, 3, 4 를 Queue 에 보냈다. 이제 GCD or Operation 은 Queue 에 쌓여있는 Task 를 다른 Thread 로 보내야한다. 어떠한 방식으로 Thread 에게 Task 를 분배할까? 이는 바로 Queue 의 특성에 따라 결정된다. Serial (직렬) 과 Concurrent (동시) 어떤 Queue 를 선택하느냐에 따라 Serial 과 Concurrent 로 나뉠 수 있다. 1. Serial (직렬) Queue 한 개의 Thread 에서 모든 Task 를 다 처리한다. 2. Concurrent (동시) Queue 여러 개의 Thread 에서 Task 를 처리한다. Seri..
DispatchQueue 로 Task 를 전달한 Main Thread GCD 의 Queue 인 Dispatch Queue 에 Task 를 전달한 Main Thread. 이제 Task 1 은 GCD 가 Thread 를 생성하여 Task 1 을 분배한 후, Task 1 이 종료되면 생성한 Thread 를 삭제할 것이다. 그럼 Main Thread 는 남은 Task 2, 3, 4 를 어떻게 처리할까? 두 가지로 나누어 생각해 볼 수 있다. 1. 비동기 (async) : 바로 Task 2 를 받아서 수행한다. Queue 에 보낸 작업이 끝나는 것을 기다리지 않고 이어서 Task 를 수행하는 것. 앞서 DispatchQueue.global().async 를 설명했었다. 아래와 같이 남은 Task 2, 3, 4 를..
동시성 프로그래밍 코드를 작성할 때 별도의 처리를 하지 않았다면, Main Thread 에서 View 를 그리는 일부터 시작해서 다른 모든 Task 들을 처리하고 있었다. 단순 계산은 금방 처리하여도, 서버에서 데이터를 가져오는 등 무거운 Task 를 처리하면서 View 를 그리는 작업을 책임지는 Main Thread 는 해야할 많은 Task 에 부담을 느낀다. 그러므로 Main Thread 의 부담을 줄이기 위해 아래와 같이 다른 Thread 에서도 이러한 Task 를 동시에 작업하도록 하는 것이 바로 동시성 프로그래밍이다. 그렇다면 어떻게 다른 Thread 로 Task 를 전달할 수 있을까? iOS 에서는 이러한 작업을 queue 라는 곳에 보내기만 하면 된다. 동시성 프로그래밍을 위해 지원하는 iO..