iOS 개념정리 - 6

유호준·2023년 2월 17일
0

iOS

목록 보기
7/8

Struct 가 무엇이고 어떻게 사용하는지 설명하시오.

  • 스위프트에서의 구조체
  • call by value가 더 적절할 때
  • 상속이 필요 없을 때

Subscripts에 대해 설명하시오.

  • class, struct, enum 등에서 특정 멤버 요소를 접근하기 위한 방법
  • subscripts 내부는 getter, setter로 구현되어 있음
  • 대괄호를 이용해 특정 값에 접근할 수 있음

String은 왜 subscript로 접근이 안되는지 설명하시오.

스위프트의 character는 하나 이상의 Unicode scaler로 이루어져있다. 즉 가변적인 길이이기 때문에 subscript로 접근할 수 없고 String.Index로 접근해야한다.

instance 메서드와 class 메서드의 차이점을 설명하시오.

  • instnace 메소드는 클래스, struct등을 실체화해서 사용해야한다. 하지만 class 메소드는 실체화하지 않아도 사용할 수 있다.
  • struct, enum에서는 활용할 수 없다

    상속이 가능한 메소드이기 때문이다. class에서는 static과 class 메소드가 같다.
    static 메소드를 override가 가능하게 만든 것

class 메서드와 static 메서드의 차이점을 설명하시오.

  • override 가능

Delegate 패턴을 활용하는 경우를 예를 들어 설명하시오.

  • 클래스나 구조체의 특정 행위를 다른 인스턴스에게 위임하는 패턴
  • swift에서 UITextField, UITableView등 객체마다 다른 행위를 해야할 때 활용

Singleton 패턴을 활용하는 경우를 예를 들어 설명하시오.

  • 특정 객체가 하나만 존재하는 것을 원할 때 사용
  • 메모리를 아끼고 데이터 공유를 할 수 있다.
  • 네트워킹, 환경설정 등에 활용

    UserDefault

KVO 동작 방식에 대해 설명하시오.

  • A 객체에서 B 객체 키의 값이 변화되는 것을 관찰할 수 있는 기능
  • 변수에 코드를 붙여 값이 변경될 때 마다 코드가 실행
  • didSet, willSet과 유사
  • 감지하려는 객체에 옵저버를 등록한다.
    • Key Path: 감시하고자 하는 프로퍼티 지정
    • Options: 값이 변화할 때, 어떤 시점의 값을 돌려받을 지 지정
    • old: 변경 이전 값, oldKey로 참조
    • new: 새로 변경된 값, newKey로 참조
    • initial: 옵저버 등록이 완료되기 전에 옵저버에게 알림을 한 번 보냄. 현재의 값을 newKey에 담아서 보냄
    • prior: 변경이 일어날 때, 변경 전후로 알림을 별도로 보냄.
class MyObjectToObserve: NSObject {
    @objc dynamic var myDate = NSDate(timeIntervalSince1970: 0) // 1970
    func updateDate() {
        myDate = myDate.addingTimeInterval(Double(2 << 30)) // Adds about 68 years.
    }
}

class MyObserver: NSObject {
    @objc var objectToObserve: MyObjectToObserve
    var observation: NSKeyValueObservation?
    
    init(object: MyObjectToObserve) {
        objectToObserve = object
        super.init()
        
        observation = observe(
            \.objectToObserve.myDate,
            options: [.old, .new]
        ) { object, change in
            print("myDate changed from: \(change.oldValue!), updated to: \(change.newValue!)")
        }
    }
}

Delegates와 Notification 방식의 차이점에 대해 설명하시오.

Delgate

  • 제 3의 객체가 필요없음
  • 다수 객체에게 이벤트 발생하는 것은 어려움

Notification

  • NotificationCenter를 이용해 이뤄짐
  • 컴파일 시 추적이 어려움

    키 값으로 Notification이나 userInfo의 값을 가져오기 때문

  • 옵저버가 많을 시 옵저버 리스트를 찾아가면서 이벤트를 발생하기 때문에 성능 저하

멀티 쓰레드로 동작하는 앱을 작성하고 싶을 때 고려할 수 있는 방식들을 설명하시오.

  • OperationQueue를 이용
  • GCD를 이용

참고자료

0개의 댓글