🌱 난 오늘 무엇을 공부했을까?
📌 면접스터디
📍 NSCache
- 키, 값 방식으로 데이터를 임시적인 방법으로 저장하는 방식
- 다양한 방법으로 시스템 저장소에 남아있는 캐시를 제거한다.
다른 어플에서 메모리가 필요하면 정책을 통해 캐시에서 일부를 제가하는 방법으로 메모리 사용 공간을 최소화
한다.
- totalCostLimit 프로퍼티를 사용해서 최대 저장가능한 비용을 설정한다.
- 기본값은 0으로 제한이 없음.
- 캐시의 총 비용이 totalCostLimit보다 높아지면 캐시는 총 비용이 totalCostLimit 아래로 떨어질 때까지 개체를 자동으로 제거
- 캐시가 개체를 제거하는 순서는 보장되지 않는다.
무조건적인 제한이 아니며, 캐시가 제한을 초과하면 캐시의 개체가 캐시의 구현 세부 사항에 따라 즉시 또는 나중에 제거되거나 전혀 제거되지 않을 수 있다.
🔗 Dictionary와 차이
- 키와 값으로 데이터를 저장하는 방법은 딕셔너리와 유사하지만, 캐시는 메모리가 부족한 상황에서 자동으로 데이터가 삭제 될 수 있다는 차이가 있는 것 같다.
- 삭제를 막아야 하는 중요한 데이터의 경우 딕셔너리를 사용한 캐시를 사용해야 할 것 같다.
- NSCache는 Thread-Safe하다
- 키 값을 복사해서 사용하지 않는다.
https://developer.apple.com/documentation/foundation/nscache
📍 URLSession
-
네트워크와 관련 된 데이터 전송 작업을 위한 타입
-
shared 라는 싱글톤을 사용할 수 있다.
- 싱글톤 외에도 init이 가능하다.
- 기본세션, 임시세션, 백그라운드 세션
- init시 URLSessionConfiguration 객체의 주입이 필요하다.
- URLSessionConfiguration 개체는 URLSession 개체를 사용하여 데이터를 업로드 및 다운로드할 때 사용할 동작 및 정책을 정의
- URLSessionConfiguration의 프로퍼티인 protocolClasses에 Mock을 주입하는 방법으로 Mock Session Test가 가능하다.
-
URL 세션 API는 스레드로부터 안전
-
대부분의 네트워킹 API와 마찬가지로 URLSession API는 매우 비동기적
-
URLSessionTaskDelegate을 통해 여러 상황에 따라 다양한 메서드를 실행할 수 있다.
- Handling Task Life Cycle Changes
- Handling Redirects
- Working with Upload Tasks
- Handling Authentication Challenges
- Handling Delayed and Waiting Tasks
- Collecting Task Metrics
https://developer.apple.com/documentation/foundation/urlsession#2934757
📍 Generic
-
사용자가 정의하는 요구 사항에 따라 모든 유형에서 작동할 수 있는 유연하고 재사용 가능한 함수 및 유형
-
중복을 피하고 의도를 명확하고 추상화된 방식으로 표현하는 코드를 작성이 가능하다.
-
콜론으로 구분된 형식 매개변수 이름 뒤에 단일 클래스 또는 프로토콜 제약 조건을 배치하여 형식 제약 조건을 작성
-
where 절을 사용해서 연관된 유형에 대한 요구사항을 정의할 수 있다.
https://docs.swift.org/swift-book/documentation/the-swift-programming-language/generics/#Associated-Types-in-Action
📍 some
- some은 제한하는 키워드
- some 키워드는 프로토콜를 채택하는 객체와 상호 작용할 때 그 객체의 내용을 숨기고 프로토콜로 포장할 수 있도록 하는 키워드이다.
- 쉽게 말하면 불투명한 유형(Associated Type)을 가지고 잇는 protocol을 프로퍼티, 매개변수, 반환타입으로 사용할 수 있게 해주는 키워드