Q. 생명주기(Lifecycle) 이란 무엇인가?
생명주기란 앱의 최초 실행부터 앱이 완전히 종료되기까지 앱이 가지는 상태와 그 상태들 사이의 전이를 뜻한다.
Life Cycle 은 두 종류로 구분된다
이해를 돕는 구조
- AppDelegate + SceneDelgate
SceneDelegate.swift 생명주기 메서드이전에는 앱이 foreground에 들어가거나 background로 이동할 때 앱의 상태를 업데이트하는 등의 앱의 주요 생명 주기 이벤트를 관리했었지만 더이상 하지 않습니다.
현재 하는 일은
- 앱의 중요한 데이터 구조를 초기화한다.
- Scene을 환경설정한다.
- 앱 밖에서 발생하는 알림에 대응한다. (배터리 부족, 전화 수신)
- 특정 Scene, View, ViewController에 한정되지 않고, 앱 자체를 타깃으로 하는 이벤트에 대응한다.
- 애플 푸시 알림 서비스처럼 실행 시 요구되는 모든 서비스를 등록한다.
- SceneDelegate의 역할
ViewController 생명주기 메서드
Q. iOS Programming에서 생명주기가 있는 객체는 무엇들이 있는가? (수업 내용 한정)
Q. 옵셔널이 나타난 배경과 사용하는 방법은 어떻게 되는가?
?
nil
Q. MVC 패턴은 무엇인가?
Model + View + Controller
구조의 아키텍처 패턴을 말한다.
`Model + View + Controller` 사이에 유기적으로 연결이 되어서 구성을 하고 있는 아키텍처 패턴
Model
은 앱의 데이터 혹은 비즈니스 로직
View
는 사용자에게 데이터를 보여주거나 UI를 담당한다. (앱 화면의 하나 하나 )
주로 struct 라는 구조체로 멤버변수가 있고 사용자가 정의하는 자료형 느낌~
ex) 테이블 뷰 관련
Controller
는 Model과 View의 중간다리 역할로 View로부터 사용자의 action을 받아 Model에게 어떤 작업을 해야 하는지 알려주거나, Model의 데이터 변화를 View에게 전달하여 View를 어떻게 업데이트할지 알려준다.
사용자가 뷰에서 액션을 가할시 데이터 변화가 생길 경우 그걸 감지해서 뷰에게 데이터 변화를 띄워줘라 이런느낌
다른 패턴에 비해 코드량이 적다.
또한, 애플에서 기본적으로 지원하고 있는 패턴이기 때문에 쉽게 접근할 수 있다.
많은 개발자들에게 친숙한 패턴이기 때문에 개발자들이 쉽게 유지보수 할 수 있다.
개발 속도가 빠르기 때문에 아키텍처가 중요하지 않을 때 사용하거나 규모가 작은 프로젝트에서 사용하기 좋다.
우선 위의 사진과 같이 View와 Controller가 너무 밀접하게 연결되어 있다.
ViewController에서 볼 수 있듯이, View와 Controller가 붙어 있으며, Controller가 View의 Life Cycle까지 관리하기 때문에 View와 Controller를 분리하기 어렵다.
이렇게 되면 재사용성이 떨어지고, 유닛 테스트를 진행하기 힘들어진다.또한 대부분의 코드가 Controller에 밀집될 수 있다.
Life Cycle 관리 뿐만아니라, delegate나 datasource 관리, 네트워크 요청, DB에 데이터 요청 등 많은 코드가 Controller에 작성되면 Controller의 크기는 비대해지고 내부 구조는 복잡해지게 된다.
이런 상황을 비유해 많은 사람들이 Massive View Controller라고 부르기도 한다.이렇게 복잡해진 코드는 프로젝트 규모가 커질수록 유지보수하기 힘들게 만든다.
IBAction, IBOutlet의 역할
**서브스크립트 (Subscripts)**
클래스, 구조체 그리고 열거형에서 스크립트를 정의해 사용할 수 있습니다
서브스크립트 : 콜렉션, 리스트, 시퀀스 등 집합의 특정 멤버 엘리먼트에 간단하게 접근할 수 있는 문법
ex ) dictionary
[Assert] UINavigationBar decoded as unlocked for UINavigationController, or navigationBar delegate set up incorrectly. Inconsistent configuration may cause problems.
3주차 미리 학습
스택 뷰는 담아서 정렬 시키기 좋은 거?
테이블 뷰는 언제 사용할까 → 가로로 스와이프 삭제가능
컬랙션 뷰는 → 갤러리 형식이지만 가로로도 만들수있음
테이블 뷰와 컬렉션 뷰 → 데이터를 다루기 쉬움 CRUD → 안드로이드 리사이클러뷰 와 유사한듯 하다.
컬렉션뷰 디폴트 이미지는 갤러리 와 유사하다.
테이블 뷰 는 리사이클러느낌? + dequeue.reusable 위에꺼 다시아래로오는 리사이클러뷰와 같음 - 재사용 시 데이터 초기화 이슈 확인하기
Delegate → (위임, 대리)
Delegate 패턴
Delegate - Protocol
mvvm - view 는 로직이 있으면 안되서 viewmodel에 로직 작성
후에 viewmodel 함수를 가져다 씀