REST API
- HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고
- HTTP Method(POST, GET, PUT/PATCH, DELETE)를 통해
- 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미함
CRUD Operation
- 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 연산
- Create, Read, Update, Delete
특징
- Server-Client(서버-클라이언트 구조)
- Stateless(무상태)
- Cacheable(캐시 처리 가능)
- Layered System(계층화)
- Uniform Interface(인터페이스 일관성)
장점
- HTTP 프로토콜을 그대로 이용하므로 별도의 인프라를 구축할 필요가 없음
- HTTP 표준 프로토콜을 사용하는 모든 플랫폼에서 사용 가능(iOS, Flutter 당연히 가능)
- 서버와 클라이언트의 역할을 명확히 분리
단점
- HTTP Method가 제한적이며 4종류 밖에 없다
Frame 와 Bounds 의 차이점
- Frame: 상위 뷰(SuperView)의 좌표시스템 안에서 View의 위치와 크기
- Bounds: View의 위치와 크기를 자신만의 좌표시스템 안에서 나타냄
실제 디바이스가 없을 때 개발 환경에서 할 수 있는 것과 없는 것
에뮬레이터 기준으로 한계 정리
하드웨어
- 가속도 센서 가압계 센서, 주변광 센서, GPS 센서 기능을 이용할 수 없음
마우스로 시뮬레이터의 터치를 하므로 줌인 줌아웃 등의 기능 테스트가 불가능함-> 커맨드 키 사용하면 할 수 있음 불편할 뿐- 카메라, 마이크 지원하지 않음
- 전화기능 사용 불가
API
- 사진, 연락처, 캘린더에 액세스하기 위해 개인 정보 보호 알림을 지원하지 않음
- Handoff 기능을 지원하지 않음
- MessageUI 기능을 지원하지 않음 - Mail 앱 연동 안되서 메일 보내는 화면 (MFMailViewController 였나 암튼 그거) 안 띄워짐
그 외
- 맥의 성능이 아이폰의 성능보다 뛰어나 CPU와 메모리 부담이 얼마나 되는지 알 수 없음 -> XCode Instrument에 메모리랑 CPU 점유율 다 나와서,,, 이거 보면 알 수 있을 듯
- 네
트워크 속도 테스트 불가-> Xcode 네트워크 확장 툴 사용하면 가능함 - 페이스 아이디 처리만 가능
앱의 콘텐츠나 데이터 자체를 저장/보관하는 특별한 객체
- UserDefaults : 앱 내부 저장소에 키-값의 쌍으로 저장하는 인터페이스. 대용량의 데이터보다 자동 로그인 여부, 아이디, 환경설정 값 등의 단일 데이터 보관
- Core Data : 객체 그래프를 관리하기 위한 프레임워크. 객체를 생성하여 데이터를 운영하기에 더 많은 저장공간과 메모리를 필요로 함. 그렇지만 더욱 빠르게 데이터를 가져온다.
- Realm : 모바일에 최적화된 데이터베이스 라이브러리. 메인 스레드에서 데이터의 읽기, 쓰기 작업을 모두 할 수 있어 편리하다.
- SQLite : 전체 데이터베이스를 디스크 파일 1개에 저장하고, 설정 자체가 매우 간편하기에 관리가 수월하다.
https://velog.io/@leeesangheee/iOS.-앱의-콘텐츠나-데이터-자체를-저장보관하는-특별한-객체를-무엇이라고-하는가
iOS. 앱의 콘텐츠나 데이터 자체를 저장/보관하는 특별한 객체를 무엇이라고 하는가?
앱의 콘텐츠나 데이터 자체를 저장/보관하는 특별한 객체를 무엇이라고 하는가?
velog.io
앱 화면의 콘텐츠를 표시하는 로직과 관리를 담당하는 객체
- UIViewController: UIKit 앱의 뷰 계층 구조를 관리하는 객체이다. 뷰의 사용자 상호작용에 응답하며 전체 인터페이스의 레이아웃을 관리한다. 데이터가 변경되면 뷰의 콘텐츠를 업데이트 할 수 있다.
🤔 App thinning
- 애플리케이션이 디바이스에 설치될 때, 앱 스토어와 운영체제가 디바이스의 특성에 맞게 설치되도록 하는 설치 최적화 기술
- 슬라이싱(slicing), 비트코드(bitcode), 주문형 리소스(on-demand resource)
https://ttuk-ttak.tistory.com/42
[iOS] 앱 시닝(app thinning)
앱 시닝(app thinning)이란? 애플리케이션이 디바이스에 설치될 때, 앱 스토어와 운영체제가 디바이스의 특성에 맞게 설치되도록 하는 설치 최적화 기술을 의미합니다. 최소한의 디스크 사용과 빠
ttuk-ttak.tistory.com
Scene Delegate
iOS12까지는 대부분 하나의 앱에 하나의 window였지만 iOS 13부터는 window의 개념이 scene으로 대체되고 하나의 앱에서 여러개의 scene을 가질 수 있게 됐다.(iPadOS의 멀티 윈도우 지원으로 인해)
이로 인해 AppDelegate의 역할 중 UI의 상태를 알 수 있는 UILifeCycle에 대한 부분을 SceneDelegate가 관리하게 되었다.
>> Scene?
UIKit는 UIWindowScene 객체를 사용하는 앱 UI의 각 인스턴스를 관리합니다. Scene에는 UI의 하나의 인스턴스를 나타내는 windows와 view controllers가 들어있습니다. 또한 각 scene에 해당하는 UIWindowSceneDelegate 객체를 가지고 있고, 이 객체는 UIKit와 앱 간의 상호 작용을 조정하는 데 사용합니다. Scene들은 같은 메모리와 앱 프로세스 공간을 공유하면서 서로 동시에 실행됩니다. 결과적으로 하나의 앱은 여러 scene과 scene delegate 객체를 동시에 활성화할 수 있습니다.
(Scenes - Apple Developer Document 참고)
https://lena-chamna.netlify.app/post/appdelegate_and_scenedelegate/
[iOS] AppDelegate와 SceneDelegate
iOS 13 이후 AppDelegate와 SceneDelegate
lena-chamna.netlify.app
상태 변화에 따라 다른 동작을 처리하기 위한 앱델리게이트 메서드
//애플리케이션이 실행된 직후 사용자의 화면에 보여지기 직전에 호출
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
//애플리케이션이 최초 실행될 때 호출되는 메소드
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool
//애플리케이션이 InActive 상태로 전환되기 직전에 호출 task 일시정지, 타이머 비활성화, 일시정지(게임)
func applicationWillResignActive(_ application: UIApplication)
//애플리케이션이 백그라운드 상태로 전환된 직후 호출
func applicationDidEnterBackground(_ application: UIApplication)
//애플리케이션이 Active 상태가 되기 직전, 화면에 보여지기 직전에 호출
func applicationWillEnterForeground(_ application: UIApplication)
//애플리케이션이 Active 상태로 전환된 직후 호출
func applicationDidBecomeActive(_ application: UIApplication)
//애플리케이션이 종료되기 직전에 호출
func applicationWillTerminate(_ application: UIApplication)
@UIApplicationMain
- 앱의 본체에 해당하는 객체인 UIApplication 객체를 생성하고 앱의 LifeCycle을 관리
- 지정된 클래스 (@UIApplicationMain이 표시된) 에서 델리게이트를 인스턴스화하고, 이를 앱의 객체에 할당한다.
- @UIApplicationMain 어노테이션은 UIApplicationMain 함수를 호출하는데, 이 함수는 App의 핵심 객체 구현과 App 구동 플로우에서 중요한 역할을 수행한다.
@main
- 프로그램 실행 시작 시 진입점으로 타입을 지정하기 위한 Swift 언어의 기능
- 사용자는 탑 레벨의 코드를 작성하는 대신 @main 단일 유형의 속성을 사용할 수 있고, 라이브러리와 프레임워크는 프로토콜이나 클래스 상속을 통해 맞춤형 진입점 동작을 제공할 수있다.
@UIApplicationMain 대신 @main을 사용하는 이유
https://seungchan.tistory.com/79
[Swift] @Main @UIApplicationMain가 무엇인가?
@main에 대해 작성하게 된 이유는 AppDelegate와 SceneDelegate의 역할과 기능을 공부하면서 궁금한 것들이 많이 생겨서 입니당 2021.09.29 - [SSAC - iOS] - [SSAC - iOS] 09월 28일 TIL [SSAC - iOS] 09월 28일..
seungchan.tistory.com
앱이 Foreground에 있을 때와 Background에 있을 때 제약 사항
- Foreground mode: 메모리 및 기타 시스템 리소스에 높은 우선순위를 가지며 시스템은 이러한 리소스를 사용할 수 있도록 필요에 따라 background 앱을 종료함 (In-Active: 앱이 실행 중이지만 아직 아무런 이벤트를 받지 않은 상태, Active: 앱이 실행 중이며 이벤트를 받고 있는 상태)
- Background mode: 가능한 적은 메모리공간을 사용. 시스템 리소스 해제, 메모리에서 해제 후 데이터를 디스크에 작성. 사용자 이벤트를 받기 어렵고 공유 시스템 리소스를 해제하고 이미지 객체 참조 등 메모리 제한 (Background: 백그라운드에서 앱이 실행되고 있는 상태. 음악앱이 켜져 있거나 하는 상황, Suspend: 백그라운드에 있으면서 앱이 동작하고 있지 않은 상태 메모리를 최소한으로 차지하고 우선적으로 메모리에서 삭제됨)
App LifeCycle (Not running, Inactive, Active, Background, Suspended)
https://developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle
Apple Developer Documentation
developer.apple.com
'면접' 카테고리의 다른 글
iOS 기술면접 정리 - 5. Swift (2) (0) | 2023.02.08 |
---|---|
iOS 기술면접 정리 - 5. Swift (1) (0) | 2022.07.10 |
iOS 기술면접 정리 - 3. Autolayout (0) | 2022.07.10 |
iOS 기술면접 정리 - 2. GCD (0) | 2022.07.10 |