👩💻 수업
📂 Segue
- Present Modally: 아래에서 위로 화면이 등장
- Show: 오른쪽에서 화면이 등장(Navigation Controller가 있는 경우, 없으면 Present Modally와 동일하게 작용함)
📂 View Controller의 생명주기
- view 계층 구성: content ➡️ Navigation Controller ➡️ Tab Bar Controller ➡️ UIWindow ➡️ Device
- viewDidLoad() ➡️ viewWillAppear() ➡️ viewDidAppear() ➡️ viewWillDisappear() ➡️ viewDidDisappear()
- Modal은 완전히 삭제될 수 있기 때문에 껐다가 다시 키면
viewDidLoad()
함수가 항상 호출된다. 하지만 Navigation Controller 혹은 Tab Bar Controller에 연결된 뷰들은 항상 남아있기 때문에 viewDidLoad() 함수는 단 한 번만 호출된다.
📂 Unwind Segue
Button
과 같이 이벤트 트리거를 일으킬 수 있는 컴포넌트를 배치한다.
- 해당 뷰를 닫았을 때 이동하고 싶은 뷰 컨트롤러에 다음과 같은 코드를 입력한다.
@IBAction func unwindTabViewController(_ sender: UIStoryboardSegue) {
}
📂 Library
Library란?
- 필요한 기능들이 묶인 코드들의 묶음
- 효율적인 코드 작성을 위해 Class 혹은 Function으로 만들어진 것
- 라이브러리를 install 할 수 있는 방법
- Cocoapods
: 많은 라이브러리들에서 이 방법을 지원하고 있음. 하지만 build speed가 느리다는 단점
: 또한 프로젝트를 빌드할 때 마다 모든 라이브러리들이 함께 빌드되어 속도가 느리다.
- Carthage
: build speed는 조금 빠름 하지만 지원되는 라이브러리들이 많지 않음
- SPM(Swift Program Manager)
: 애플이 지원한다는 장점(XCode내에서 바로 설치가 가능함) 이전까지는 지원하는 라이브러리가 많지 않았지만 현재는 많이 사용되고 있는 추세
- Manual
: 수동으로 코드 넣는 방법
오늘 실습에서 사용한 라이브러리들!
IQKeyboardManager
FSCalendar
TextFieldEffects
SideMenu
cf) 라이브러리 vs 프레임워크 ➡️ 자율성/주도권
프레임워크는 iOS처럼 주어진 상황안에서 주어진 변수 등 제한이 많음. 정해진 프레임 안에서만 작업이 가능하다.
하지만 라이브러리는 조금 더 자유롭게 사용할 수 있음. 직접 코드를 제어할 수 있음!
Dependency Rule
- 소프트웨어 버전 규칙

- Major: 기존 버전과 거의 호환되지 않음. API가 바뀌면 Major 버전 + 1 ➡️ 이런 경우 기존 메서드 등이 deprecated되어 거의 사용할 수 없음
- Minor: 기존 버전과 호환됨. 새로운 기능이 추가되는 경우 Minor 버전 + 1
- Patch: 기존 버전에서 버그를 수정하는 경우 Patch 버전 + 1
📂 UserDefaults
- iOS 디바이스 기기(로컬)에 저장 ➡️ 앱 삭제 시 관련 데이터 함께 삭제됨 ➡️ 백업/복구 기능이 필수
- 저장
UserDefaults.standard.set(저장할 값, forKey: "저장할 키")
UserDefaults.standard.저장한값타입(forKey: "저장한 키")
cf) UserDefaults vs DataBase
UserDefaults | DataBase |
---|
단일 데이터 값(경량) | 유사한 대량 데이터 값(중량) |
Apple에서 제공해주는 Key-Value 형태의 기본 저장소 | Core Data(by Apple), Realm, SQLite |
자동 로그인 여부, 알림 수신 여부 등 간단한 사용자 기본 설정 | 영화 관리 데이터, 일기, 채팅 내역 데이터 등 |
👩💻 추가 스터디
📂 Storyboard Reference
- 스토리보드를 사용하여 협업하는 경우, 앱이 충돌이 생기지 않도록 개발하는 방법
➡️ 100% 코드로 작업하기 혹은 하나의 스토리보드 안에 하나의 뷰컨트롤러만 두면서 스토리보드를 나눠서 작업하기
➡️ 이때 스토리보드를 나눠 작업하기 위해 Storyboard Reference
를 활용한다.
👩💻 미션
📂 UserDefaults Upgrade
- UserDefaults에 기본 자료형 혹은 배열의 형태로 저장이 가능하다. 하지만 커스텀 클래스 객체는 바로 저장을 할 수 없다. 이를 저장하고 가져오기 위해서는 어떤 과정이 필요할까?
📂 iOS Sandbox System
- UserDefaults는 iOS의 어느 곳에 저장이 될까?
AppData - Library - Preferences - plist에 Dictionary(Key-Value)형태로 저장된다.
cf. 사진 촬영 후 저장하는 경우 Documents 폴더 활용
cf. Library - SplashBoard - Snapshots : Splash 화면에서 사용하는 혹은 백그라운드 상태에 있을 때 snapshot을 애플이 자동으로 저장해두고 사용함. 마지막으로 사용한 화면이 아닐 수도 있음.
- iOS 앱 설정에서 앱의 크기를 확인했을 때 문서 및 데이터는 무엇을 의미할까?
- 애플은 사용자의 데이터를 어떤 정책에 기반해 저장하고 관리하며 보안에 신경을 쓰고 있을까?