Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions LEVEL 1/04-Closure.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
## 04. Closure
### Swift에서 클로저(Closure)란 무엇이며, 어떻게 사용하나요?
- Swift에서 클로저는 이름 없는 함수입니다.
- 클로저는 1급 객체이기 때문에 변수, 함수의 인자, 함수의 반환값으로 사용할 수 있습니다.

### 클로저의 캡처(Capture) 기능은 무엇인가요?
- 클로저는 클로저가 호출된 컨텍스트와 다른 생명주기를 가질 수 있습니다.
- 따라서 클로저 내부에서 외부 컨텍스트의 변수를 참조하게 되면, 클로저보다 외부 컨텍스트가 더 빨리 사라질 가능성이 있습니다.
- 이러한 가능성 때문에 클로저는 외부 컨텍스트의 변수와 상수를 캡처해 외부 컨텍스트가 사라져도 캡처한 값을 참조 및 변경 가능하도록 설계되어 있습니다.

### @escaping 클로저와 non-escaping 클로저의 차이점은 무엇인가요?
- 클로저가 함수의 매개변수로 전달되었지만, 함수 반환 이후에 호출되는 경우 클로저가 탈출(escaping)한다고 할 수 있습니다.
- 이 때 매개변수에 @escaping을 작성해 해당 클로저는 탈출이 허용됨을 나타낼 수 있습니다.
- 만약 탈출 클로저 내부에서 클래스 인스턴스 self를 참조하게 된다면, 두 참조 타입이 서로를 참조하는 순환 참조가 발생하게 됩니다.
- 이를 방지하기 위해 캡처 리스트에서 weak 또는 unowned 키워드를 사용해 레퍼런스 카운트를 증가시키지 않도록 방지해야 합니다.
- 클로저의 생명주기가 self보다 긴 경우를 대비하기 위해 weak 키워드를 사용해주는 것이 좋습니다.

### 트레일링 클로저(Trailing Closure) 문법은 어떤 경우에 유용한가요?
- 트레일링 클로저 문법은 콜백 함수를 작성할 때 유용합니다.
- 함수의 매개변수로 함수를 전달 및 호출하는 것이 콜백 함수인데요, 트레일링 클로저 문법을 활용하면 콜백 함수를 손쉽게 작성할 수 있습니다.
45 changes: 45 additions & 0 deletions LEVEL 1/08-Save Data.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
## 08. Save Data
### iOS 앱에서 데이터를 저장하는 방법에는 어떤 것들이 있나요?
- iOS 앱에서 데이터를 저장하는 방법으로는 UserDefaults, Keychain, FileManager, CoreData, SQLite, Realm 등이 있습니다.
- UserDefaults
- 간단한 데이터를 키-값 쌍으로 저장
- 사용하기 쉽고 접근이 빠릅니다.
- 대용량 데이터나 복잡한 구조 저장에는 적합하지 않고, 보안성이 약합니다.

- Keychain
- 암호화 복호화를 지원해 보안에 민감한 데이터를 저장하기 적합합니다.
- 앱 샌드박스 외부에 위치해있어 앱을 삭제해도 사라지지 않습니다.

- File System
- 파일 시스템에 곧바로 저장하는 방식입니다.
- 구조화되지 않은 binary, json, 이미지 등의 데이터를 저장하기 적합합니다.

- CoreData
- 객체 그래프 관리와 영구 저장을 위한 프레임워크 입니다.
- SQLite를 기반으로 하지만 직접적인 쿼리 없이도 데이터를 다룰 수 있도록 추상화를 제공합니다.
- 앱의 데이터 모델을 관계형 DB처럼 관리할 수 있게 해줍니다.
- 높은 수준으로 구조화된 객체들을 저장하기 적합합니다.

- SQLite
- 오픈소스로 동작하는 크로스플랫폼 DBMS 입니다.
- SQL 쿼리로 동작합니다.
- 안드로이드, iOS, 윈도우, macOS 등 매우 다양한 플랫폼을 지원하기 때문에 크로스플랫폼 환경에서 유용합니다.

- Realm
- 모바일 앱을 위해 설계된 크로스 플랫폼 데이터베이스 입니다.
- 모바일에 중점을 두고 설계되어 경량화 및 메모리, 디스크, 배터리 효율성을 고려해 만들어졌습니다.
- 모바일 크로스플랫폼 환경에 적합한 데이터베이스 입니다.

### UserDefaults의 사용 시 주의할 점은 무엇인가요?
- UserDefaults는 앱이 시작될 때 메모리에 모두 불러와지기 때문에 거대한 크기의 정보를 저장하기에는 적합하지 않습니다.
- 또한 보안에 취약하기 때문에 민감한 정보를 저장하기에도 적합하지 않습니다.

### Keychain은 어떤 데이터를 저장하기에 적합한가요?
- Keychain에는 API Key 등 민감한 정보를 저장하기에 적합합니다.

### Core Data와 SQLite의 차이점은 무엇이며, 각각 언제 사용하면 좋나요?
- Core Data는 데이터베이스가 아닌 프레임워크인 반면 SQLite는 데이터베이스 입니다.
- 코어 데이터는 앱과 실제 영구 저장소 사이에서 영구 저장소에 대한 접근을 더 쉽게 만들어주는 역할을 합니다.
- 실제로 코어 데이터는 내부적으로 SQLite를 영구 저장소 옵션 중 하나로 제공합니다.
- 앱 저장소가 애플 생태계에서만 필요하다면 Core Data를 사용할 수 있습니다.
- 만약 크로스 플랫폼 저장소가 필요하다면 SQLite를 사용할 수 있습니다.