iOS 개념정리 - 8

유호준·2023년 3월 6일
0

iOS

목록 보기
8/8

defer가 호출되는 순서는 어떻게 되고, defer가 호출되지 않는 경우를 설명하시오.

호출 순서

  • 선언된 역순으로 호출된다.

    순차적으로 스택에 저장되기 때문에 LIFO로 호출된다.

  • 선언된 코드 블럭을 빠져나가기 직전에 실행된다.

호출되지 않는 경우

  1. throw를 이용해 오류를 던질 경우
  2. guard를 사용해 중간에 함수를 종료하는 경우
  3. 리턴 값이 Never(비반환함수)인 경우

    에러나면서 함수를 반환하지 않고 종료하기 때문에
    비반환함수란 바로 앱 실행을 계속 유지할 수 없는 오류가 발생할 경우 이를 사용자에게 안내하고, 서버에 오류를 보고하는 등의 일을 한 후 프로세스를 종료시킬 때 사용

property wrapper에 대해서 설명하시오.

  • 프로퍼티를 가질 수 있는 타입 앞에 붙일 수 있다.
  • 프로퍼티에 하고싶은 행동을 정의하는 타입
@propertyWrapper
struct Uppercase {
    
    private var value: String = ""
    
    var wrappedValue: String {
        get { self.value }
        set { self.value = newValue.uppercased() }
    }
    
    init(wrappedValue initialValue: String) {
        self.wrappedValue = initialValue
    }
}

Generic에 대해 설명하시오

  • 타입을 파라미터화해서 컴파일 시 구체적인 타입이 결정되도록 하는 타입

some 키워드에 대해 설명하시오.

  • some 키워드는 리턴 타입을 자동으로 그리고 빠르게 추론할 수 있는 스위치 기능이다.
  • 함수 외부에서 반환값의 타입을 정확히 알지 못하게 숨기는 것
    var body: some View {
       VStack(alignment: .leading) {
           Text("My hovercraft is full of eels")
               .font(.headline)
           Text("Mijn luchtkussenboot zit vol paling")
               .font(.subheadline)
       }
    }

    사실 해당 뷰의 타입은 VStack<TupleView<(Text, Text)>> 이다. 해당 뷰의 타입을 구체적으로 입력할 수 있으나 그렇데 된다면 뷰의 구성이 변경될 때마다 이 타입을 계속 업데이트해야 한다.
    some 키워드를 사용해 View를 선언하고 컴파일 타임에 구체적인 타입을 결정하도록 하는 것이 생산성이 더 좋다.

Result타입에 대해 설명하시오.

@frozen enum Result<Success, Failure> where Failure: Error
  • Result 타입은 Generic으로 선언되어 있고, 경우에 따른 연관값을 포함하여, 성공과 실패를 나타내는 값이다.
  • Error 형식이 선언되고 결과를 성공과 실패로 나누어 가독성이 더 좋다.

Codable에 대하여 설명하시오.

  • Encodable + Decodable

    Encodable, Encodable -> data
    Decodable, data -> Decodable

  • Decodable을 채택한다면 init을 무조건 생성해야한다.

Closure에 대하여 설명하시오.

  • 함수를 변수에 선언하는 형태
  • 어떠한 상수나 변수의 참조를 캡처해 저장할 수 있다.
  • 참조타입이다.

Closure와 함수와의 관계에 대해 설명하시오.

모르겠다..;

ARC란 무엇인지 설명하시오.

  • Automatic Reference Counting
  • Swift의 메모리 관리 모델
  • 컴파일 타임에 작동

    컴파일 타임에 자동으로 retain, release를 적절한 위치에 삽입

  • retain Cycle이 발생할 수 있다.

    따라서 순환참조가 발생하는 것에는 한쪽에 weak 키워드를 넣어야 이를 방지할 수 있다.
    strong: 강한 참조
    weak : 약한 참조, 메모리가 해제될경우 레퍼런스가 nil이 됨
    unowned: 자신이 참조하는 인스턴스의 retain count를 증가시키지 않는다. 사라지지 않을 것을 보장해야된다.

Retain Count 방식에 대해 설명하시오.

Retain

  • 객체의 레퍼런스 카운트를 증가

Release

  • 객체의 레퍼런스 카운트를 감소
  • 컴파일 타임에 자동으로 retiain, release 메소드를 적절한 위치에 넣어서 작동
  • retain count가 0이 되면 객체가 메모리에서 해제된다.

참고자료

0개의 댓글