CoreData의 각 Entity, Attribute, Relationship의 역할?
👉 CoreData?
iOS와 macOS 어플리케이션에서 데이터 모델을 관리하고 영구적으로 저장할 수 있게 해주는 프레임 워크. 데이터 모델을 정의하고 읽고 쓸 수 있다. 주요 구성 요소에는 Model, Context, Store Coordinator가 있다.
Model(NSManagedObjectModel)
어플리케이션 데이터 구조를 정의하는 역할을 한다.
Entity(엔티티), Attribute(속성), Relationship(관계) 등을 포함한다.
1️⃣ Entity(엔티티)
데이터 모델에서 객체 혹은 데이터의 종류.
각각의 엔티티는 독립적인 데이터 모델 객체로 존재할 수 있다.
Attribute(속성)와 Relationship(관계)을 가질 수 있다.
2️⃣ Attribute(속성)
Entity의 특징이나 속성.
객체가 가질 수 있는 여러 가지 정보를 정의한다.
데이터 타입과 함께 정의된다.
3️⃣ Relationship(관계)
두 개 이상의 Entity 간의 연결, Entity의 상호작용을 정의한다.
단일 관계(One-to-One), 다중 관계(One-to-Many, Many-to-Many) 등으로 정의될 수 있다.
각각의 관계는 연관된 엔티티들 간의 데이터 관계를 나타낸다.
앱 화면의 콘텐츠를 표시하는 로직과 관리를 담당하는 객체는?
ViewController
👉 앱 화면의 콘텐츠를 표시하는 로직과 관리를 담당한다.
MVC(Model-View-Controller) 패턴에서 “View”와 “Controller” 역할을 담당하는 객체이다.
1️⃣ UI 관리
화면에 표시되는 UI 요소들을 관리한다.
Label, Image, Button, TableView, CollectionView 등 다양한 요소가 포함된다.
UI 요소들의 위치, 크기, 색상, 텍스트 등을 설정할 수 있다.
2️⃣ 사용자 입력 처리
사용자의 입력, 즉 동작(터치, 제스처, 키보드 입력 등)을 처리한다.
3️⃣ 모델과의 상호작용
모델에서 데이터를 가져와 UI에 표시하거나, 사용자 입력을 모델로 전달해 데이터를 업데이트 한다.
4️⃣ 화면 전환 관리
여러 화면 간의 전환을 관리한다.
다른 ViewController로의 화면 전환 혹은
스택 간의 이동 등의 작업을 처리한다.
5️⃣ 뷰의 생명 주기 관리
뷰의 LifeCycle과 관련된 메서드를 구현한다.
뷰가 생성되고 사라질 때 필요한 작업들을 처리한다.
viewDidLoad() 메서드 등이 해당된다.
(+) viewDidLoad()
뷰 컨트롤러가 관리하는 뷰 계층 구조가 메모리에 로드된 후에 호출 된다. 보통 초기화 작업, UI 구성 등의 작업을 수행한다.
(+ 추가) 아키텍처 패턴들
1️⃣ MVVM (Model-View-ViewModel):
- MVVM은 Model-View-ViewModel의 약자로, MVC의 확장된 형태로 간주될 수 있습니다. 이 패턴은 UI와 비즈니스 로직 사이의 의존성을 줄이기 위해 설계되었습니다. ViewModel은 UI를 표현하기 위한 데이터를 가지고 있으며, 이 데이터는 모델에서 가져옵니다. 이를 통해 UI와 비즈니스 로직을 분리하여 테스트와 유지보수를 용이하게 합니다.
2️⃣ VIPER (View, Interactor, Presenter, Entity, Router):
- VIPER는 복잡한 애플리케이션을 구축하는 데 사용되는 아키텍처 패턴입니다. 이 패턴은 MVC의 단점을 극복하고자 설계되었습니다. 각 구성 요소는 엄격하게 역할을 분리하여 코드의 의존성을 최소화하고 테스트 용이성을 높입니다.
3️⃣ Clean Architecture:
- Clean Architecture는 소프트웨어를 구성하는 각 요소를 독립적으로 유지하고 변경을 쉽게 만들기 위해 설계된 아키텍처 패턴입니다. 이 패턴은 내부 구성 요소들이 외부 요소에 의존하지 않도록 하여 높은 결합도와 낮은 의존도를 유지하려는 노력을 기반으로 합니다.
4️⃣ Flux Architecture:
- Flux는 React 애플리케이션에서 상태 관리를 위한 아키텍처 패턴으로 시작되었지만, 다른 플랫폼에서도 널리 사용되고 있습니다. 이 패턴은 단방향 데이터 흐름을 갖는 것으로 유명하며, 상태를 변경하기 위해 액션을 디스패치하고, 변경된 상태를 감지하여 뷰를 업데이트합니다.
앱의 콘텐츠나 데이터 자체를 내부 저장/보관하는 특별한 객체로는 무엇이 있는지?
1️⃣ UserDefaults
UserDefaults는 간단한 데이터(예: 사용자 설정, 앱 상태 등)를 내부에 키-값 쌍의 형태로 저장하는 데 사용된다. 주로 앱의 설정 값이나 사용자의 기본 설정 등을 저장할 때 활용된다. 데이터는 파일 시스템에 저장되고, 특정한 크기의 데이터나 민감한 정보에는 적합하지 않을 수 있다.
2️⃣ File System
앱이 생성하거나 사용하는 파일들을 내부 파일 시스템에 저장하는 방식이다. 주로 이미지, 비디오, 오디오, 문서 등의 콘텐츠를 저장하는 데 사용된다. FileManager 클래스를 만들어 파일을 생성, 읽기, 쓰기, 삭제할 수 있다.
3️⃣ Core Data
데이터 베이스와 유사한 기능을 제공한다. 데이터 모델을 관리하고 영구적으로 저장할 수 있게 해주는 프레임 워크. 데이터 모델을 정의하고 읽고 쓸 수 있다. 객체 간의 관계를 표현하는 데 유용하다.
URLSession 이란?
👉 네트워크 데이터 가져오거나 보내는 작업(네트워크 통신)을 수행하기 위한 객체이다.
URLSession을 사용해 웹 서버와 데이터를 주고받을 수 있고, HTTP 요청을 보내고 응답을 처리할 수 있다. 다양한 서브 클래스(URLSessionDataTask, URLSessionDownloadTask, URLSessionUploadTask 등)를 통해 다양한 작업 유형에 대한 구체적인 기능을 제공한다. 클래스들을 사용해 원하는 네트워크 작업을 수행할 수 있다.
1️⃣ 네트워크 요청 처리
HTTP 요청 생성하고 보낼 수 있다. 웹 서버에 데이터를 요청하거나 업로드할 수 있다.
2️⃣ 비동기적 데이터 다운로드
비동기적으로 데이터를 다운로드하는 기능을 제공한다.
웹 서버에서 데이터 가져와 로컬에 저장하거나 즉시 사용할 수 있다.
3️⃣ 업로드 및 다운로드 진행률 모니터링
네트워크 작업의 진행 상황 추적할 수 있다. 데이터의 업로드, 다운로드 진행되는 동안 진행률 모니터링 하고 UI 업데이트, 추가 작업을 수행할 수 있다.
4️⃣ 백그라운드 작업 지원
앱이 백그라운드에서 실행 중일 때도 네트워크 작업을 수행하는 기능을 제공한다. 백그라운드에서 데이터 다운로드, 업로드, 업데이트를 수행할 수 있다.
과제 제출할때는 해당 질문들 진짜 가볍게 적었는데 민희님도 그렇고 유진님도 자세하게 적어주셨네요.
ㅠ ㅠ 반성하도록 하겠습니다.