면접스터디 - NSCache, URLSession, Generic, some

Groot·2023년 3월 16일
0

TIL

목록 보기
132/148
post-thumbnail

🌱 난 오늘 무엇을 공부했을까?

📌 면접스터디

📍 NSCache

  • 키, 값 방식으로 데이터를 임시적인 방법으로 저장하는 방식
  • 다양한 방법으로 시스템 저장소에 남아있는 캐시를 제거한다. 다른 어플에서 메모리가 필요하면 정책을 통해 캐시에서 일부를 제가하는 방법으로 메모리 사용 공간을 최소화 한다.
  • totalCostLimit 프로퍼티를 사용해서 최대 저장가능한 비용을 설정한다.
    • 기본값은 0으로 제한이 없음.
    • 캐시의 총 비용이 totalCostLimit보다 높아지면 캐시는 총 비용이 totalCostLimit 아래로 떨어질 때까지 개체를 자동으로 제거
    • 캐시가 개체를 제거하는 순서는 보장되지 않는다.
  • 무조건적인 제한이 아니며, 캐시가 제한을 초과하면 캐시의 개체가 캐시의 구현 세부 사항에 따라 즉시 또는 나중에 제거되거나 전혀 제거되지 않을 수 있다.

🔗 Dictionary와 차이

  1. 키와 값으로 데이터를 저장하는 방법은 딕셔너리와 유사하지만, 캐시는 메모리가 부족한 상황에서 자동으로 데이터가 삭제 될 수 있다는 차이가 있는 것 같다.
    • 삭제를 막아야 하는 중요한 데이터의 경우 딕셔너리를 사용한 캐시를 사용해야 할 것 같다.
  2. NSCache는 Thread-Safe하다
  3. 키 값을 복사해서 사용하지 않는다.

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을 통해 여러 상황에 따라 다양한 메서드를 실행할 수 있다.

    1. Handling Task Life Cycle Changes
    2. Handling Redirects
    3. Working with Upload Tasks
    4. Handling Authentication Challenges
    5. Handling Delayed and Waiting Tasks
    6. Collecting Task Metrics
      https://developer.apple.com/documentation/foundation/urlsession#2934757

📍 Generic

  • 사용자가 정의하는 요구 사항에 따라 모든 유형에서 작동할 수 있는 유연하고 재사용 가능한 함수 및 유형

  • 중복을 피하고 의도를 명확하고 추상화된 방식으로 표현하는 코드를 작성이 가능하다.

  • 콜론으로 구분된 형식 매개변수 이름 뒤에 단일 클래스 또는 프로토콜 제약 조건을 배치하여 형식 제약 조건을 작성

    • 예시
         func someFunction<T: SomeClass, U: SomeProtocol>(someT: T, someU: U) {
      // function body goes here
         }
  • where 절을 사용해서 연관된 유형에 대한 요구사항을 정의할 수 있다.

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/generics/#Associated-Types-in-Action

📍 some

  • some은 제한하는 키워드
  • some 키워드는 프로토콜를 채택하는 객체와 상호 작용할 때 그 객체의 내용을 숨기고 프로토콜로 포장할 수 있도록 하는 키워드이다.
  • 쉽게 말하면 불투명한 유형(Associated Type)을 가지고 잇는 protocol을 프로퍼티, 매개변수, 반환타입으로 사용할 수 있게 해주는 키워드
profile
I Am Groot

0개의 댓글