ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 면접 예상문답
    면접 2023. 2. 21. 18:15

    면접 예상 질의에 대한 답변 과 스터디를 통해 공부한 꼬리 질문과 답변을 정리하는 공간입니다.

    iOS

    💡 Bounds 와 Frame 의 차이점을 설명하시오.

    ✅ Frame은 슈퍼 뷰의 좌표계에서의 좌표와 크기를 Bounds는 자기자신의 좌표계에서의 좌표와 크기를 나타냅니다.

    💡 실제 디바이스가 없을 경우 개발 환경에서 할 수 있는 것과 없는 것을 설명하시오.

    ✅ 하드웨어적 측면에서는 모션 측정 및 센서 그리고 오디오 및 비디오를 입력할 수 없습니다. 또한 API로는 Apple 푸시 알림을 받거나 보낼 수 없으며, UIBackgroundModes키 및 핸드오프를 사용할 수 없습니다.
    🙋‍♂️ 시뮬레이터로 충분히 테스트를 할 수 있는 앱을 개발하게 되면, 굳이 해당 앱을 실제 디바이스를 이용해서 테스트를 해야하는지에 대한 여부와 그 이유를 말해주세요.

    ✅ 시뮬레이터와 실제 디바이스는 자원 및 입,출력 부분에서 많은 차이점이 존재합니다. 시뮬레이터에서 아무런 문제없이 동작하더라도 실제 디바이스에서는 의도하지 않는 버그들이 발생할 수 있습니다. 그렇기 때문에 실제 디바이스에서도 테스트를 해야 한다고 생각합니다.

    🙋‍♂️ 시뮬레이터와 실제 디바이스 사이에 일반적인 차이가 있다면 어떤게 있을까요?

    시뮬레이터는 Mac의 자원을 사용하기 때문에 실제 디바이스의 성능과 차이가 있습니다. 또한 시뮬레이터는 마우스 및 키보드를 이용하여 입력을 하지만 실제 디바이스의 경우에는 터치를 이용하는 차이가 있습니다.

    🙋‍♂️ 시뮬레이터를 사용할 때의 장점을 설명하시오.

    디바이스 보다 빠르고 쉽게 테스트할 수 있는 점이 장점이라고 생각합니다.

    💡 앱의 콘텐츠나 데이터 자체를 저장/보관하는 특별한 객체를 무엇이라고 하는가?

    ✅ Model입니다.

    💡 앱 화면의 콘텐츠를 표시하는 로직과 관리를 담당하는 객체를 무엇이라고 하는가?

    💡 App thinning에 대해서 설명하시오.

    💡 앱이 시작할 때 main.c 에 있는 UIApplicationMain 함수에 의해서 생성되는 객체는 무엇인가?

    💡 @Main에 대해서 설명하시오.

    💡 앱이 foreground에 있을 때와 background에 있을 때 어떤 제약사항이 있나요?

    ✅ Foreground상태는 앱이 실행되어 사용자에게 보여지고 있는 상태입니다. Foreground상태에는 두가지 상태를 일컫는 말로 InActive상태와 Active상태를 나타냅니다. InActive상태에서는 사용자에게 보여지지만 사용자의 이벤트를 받지 못하는 제약사항이 있으며, Active상태에서는 별다른 제약사항이 없습니다. 반면 Background상태는 앱이 Background에서 실행되고 있는 상태입니다. Background상태에서는 적은 메모리를 사용해야하기 때문에 사용자에게 이벤트를 받지 못하는 제약이 있습니다. 다만 AirPlay, PIP 비디오를 사용한 오디오 통신, 사용자 위치 서비스, Voice over IP,외부 악세서리와의 통신, 블루투스 LE(Low Energy)와 통신, 혹은 디바이스를 블루투스 LE 악세서리로 변환, 서버에서의 정기적인 업데이트, Apple Push Notification 지원에 해당하는 이벤트는 처리할 수 있습니다.

    💡 상태 변화에 따라 다른 동작을 처리하기 위한 앱델리게이트 메서드들을 설명하시오.

    💡 앱이 In-Active 상태가 되는 시나리오를 설명하시오.

    ✅ In-Active상태란 앱이 실행중이나 사용자로부터 event를 받을 수 없는 상태입니다. In-Active 상태가 되는 예시로는 앱을 종료된 실행했을때, 앱이 Background상태로 진입할때 등등 많은 경우가 존재합니다.

    💡 scene delegate에 대해 설명하시오.

    💡 UIApplication 객체의 컨트롤러 역할은 어디에 구현해야 하는가?

    💡 App의 Not running, Inactive, Active, Background, Suspended에 대해 설명하시오.

    ✅ 해당 키워드들은 앱의 Life Cycle에서의 상태들 입니다.
    Not running은 앱이 실행중이지 않은 상태입니다.
    Inactive는 앱이 실행중이고 사용자에게 보여지는 Forground상태이나 사용자로부터 이벤트를 받을 수 없는 상태입니다.
    Active는 Inactive와 마찬가지로 Forground상태이며 사용자에게 이벤트를 받을 수 있는 상태입니다.
    Background는 앱이 실행중이나 적은량의 메모리를 사용 중이며 사용자에게 보여지지 않는 상태로 특정 작업만 수행 중인 상태입니다.
    Suspended는 다시 실행하면 빠르게 실행되기 위해 메모리에만 앱이 올라가 있는 상태입니다. 기기의 메모리가 부족하게되면 Suspended상태의 앱들을 메모리를 해제하게 됩니다.

    💡 NSOperationQueue 와 GCD Queue 의 차이점을 설명하시오.

    ✅ NSOperationQueue 와 GCD는 특정 작업을 비동기적으로 처리할 때 사용합니다. NSOperationQueue은 작업을 우선순위를 통해서 순서를 정할 수 있으며, 작업을 일시정지, 취소 등을 할 수 있고, 작성 상태를 KVO를 이용하여 감시할 수 있습니다. 이에 반해 GCD는 앞에서 설명한 기능들을 사용하지 못하나 보다 손 쉽게 사용할 수 있습니다.

    💡 GCD API 동작 방식과 필요성에 대해 설명하시오.

    💡 Global DispatchQueue 의 Qos 에는 어떤 종류가 있는지, 각각 어떤 의미인지 설명하시오.

    💡 iOS 앱을 만들고, User Interface를 구성하는 데 필수적인 프레임워크 이름은 무엇인가?

    💡 Foundation Kit은 무엇이고 포함되어 있는 클래스들은 어떤 것이 있는지 설명하시오.

    💡 Delegate란 무엇인지 설명하고, retain 되는지 안되는지 그 이유를 함께 설명하시오.

    💡 NotificationCenter 동작 방식과 활용 방안에 대해 설명하시오.

    💡 UIKit 클래스들을 다룰 때 꼭 처리해야하는 애플리케이션 쓰레드 이름은 무엇인가?

    💡 App Bundle의 구조와 역할에 대해 설명하시오.

    💡 모든 View Controller 객체의 상위 클래스는 무엇이고 그 역할은 무엇인가?

    💡 자신만의 Custom View를 만들려면 어떻게 해야하는지 설명하시오.

    💡 View 객체에 대해 설명하시오.

    💡 UIView 에서 Layer 객체는 무엇이고 어떤 역할을 담당하는지 설명하시오.

    💡 UIWindow 객체의 역할은 무엇인가?

    ✅ UIWindow는 사용자에게 보여지는 하나의 창입니다. 기본적으로 UIWindow는 View들을 담아서 사용자에게 인터페이스를 제공고, ViewController와 상호작용하여 이벤트를 처리합니다.

    💡 UINavigationController 의 역할이 무엇인지 설명하시오.

    ✅ UINavigationController은 하나 이상의 UIViewController를 계층을 만들어 관리해주는 container view controller의 역할을 수행합니다. 또한 각 화면에 맞게 네비게이션바 및 툴바를 관리해 줍니다.

    💡 TableView를 동작 방식과 화면에 Cell을 출력하기 위해 최소한 구현해야 하는 DataSource 메서드를 설명하시오.

    TableView는 어떤 셀을 사용하여서 어떻게 배치 할 것인지를 구현해야 합니다. 해당 구현은 TableViewDataSource에서 담당하며 해당 프로토콜을 채택하고 필수 구현 메서드 2가지를 구현해야 합니다. 섹션에서 몇개의 Row를 그려야되는지 알려주는 numberOfRowsInSection, 현재 IndexPath에 해당하는 Cell을 반환해주는 cellForRowAt 두개의 메서드를 구현해야 합니다.

    🙋‍♂️ DataSource와 Delegate는 어떤 차이가 있는가?

    ✅Delegate의 경우 TableView의 셀의 선택에 대한 이벤트 관리, 섹션의 헤더 및 푸터 관리, 셀의 삭제 및 정렬 관리, TableView의 기타 이벤트 관리를 담당하며, DataSource의 경우 TableView의 데이터를 관리 및 Cell을 제공해주는 역할을 담당합니다.

    🙋‍♂️ 리스트 뷰를 구현할 때, TableView와 CollectionView 중 어느 걸로 구현하는가? 그리고 해당 뷰를 선호하는 이유는?

    ✅ 디자인을 어떻게 구현해야 하느냐에 따라서 다를 것 같습니다. 기본적으로는 CollectionView를 선호하며 추후에 디자인 수정이 이루어 질때 손 쉽게 수정할 수 있기 때문에 선호합니다.

    🙋‍♂️ tableView 보다 collectionView가 적합한 상황은 어떤 경우가 있을까요?

    ✅ 단순한 List형태의 경우 TableView를 사용하는 것이 유리할 것 같습니다. 그 외의 경우에는 CollectionView를 사용하는 것이 맞다고 생각합니다.

    💡 하나의 View Controller 코드에서 여러 TableView Controller 역할을 해야 할 경우 어떻게 구분해서 구현해야 하는지 설명하시오.

    💡 setNeedsLayout와 setNeedsDisplay의 차이에 대해 설명하시오.

    ✅ setNeedsLayout와 setNeedsDisplay는 공통적으로 다음 사이클에 업데이트를 요청하는 메서드입니다. setNeedsLayout은 다음 Update Cycle에 해당 View와 subView들의 Layout을 조정하도록 요청합니다. setNeedsDisplay는 다음 Drawing Cycle에 해당 View를 다시 그리도록 요청합니다.

    💡 stackView의 장점과 단점에 대해서 설명하시오.

    ✅ StackView의 장점으로는 AutoLayout을 구현하기 쉽고 간편하다. SubView들을 추가하고 삭제하기가 편하다. 단점은 생각나지 않습니다.

    💡 NSCache와 딕셔너리로 캐시를 구성했을때의 차이를 설명하시오.

    💡 URLSession에 대해서 설명하시오.

    ✅ URLSession은 iOS에서 제공하는 HTTP를 이용하여 서버와 통신할 수 있는 API입니다. URLSession은 URLSessionConfiguration을 통해 생성되고, 생성된 URLSession은 URLSessionTask를 생성할 수 있으며, 이를 통해 서버와 네트워킹 할 수 있습니다. 

    💡 prepareForReuse에 대해서 설명하시오.

    ✅ prepareForReuse 메서드는 TableView 또는 CollectionView의 Cell이 재사용될 수 있게 설정하는 메서드입니다. prepareForReuse는 Cell의 View와 관련된 속성을 초기화 해줘야 하며, Content와 관련된 내용은 tableView(_:cellForRowAt:), collectionView(_:cellForItemAt:)에서 초기화해줘야 합니다.

    💡 다크모드를 지원하는 방법에 대해 설명하시오.

    ✅ iOS13부터 다크모드를 사용할 수 있습니다. 다크모드는 사용자가 저조도 환경에서 편안하게 앱을 사용할 수 있도록 제공하는 기능입니다. Apple에서는 System Color를 사용해서 다크모드를 지원하는 것을 권장합니다. 하지만 커스텀한 색상을 사용하는 경우에는 Assets을 이용하여 Color Set을 추가하여 사용하는 방법과 코드상에서 다크 모드 여부를 확인하여 그에 맞는 색상을 사용하는 방법이 있습니다.

    💡 ViewController의 생명주기를 설명하시오.

    ✅ ViewController는 이니셜라이저를 통해서 인스턴스화 된 후 loadView를 호출하여 View를 메모리에 할당합니다. 그 후 viewDidLoad 메서드가 호출 됩니다. ViewController의 View가 Appear 될 때 전, 후를 알려주는 viewWillAppear, viewDidAppear 메서드가 호출되고, ViewController의 View가 Disappear 될 때 전, 후를 알려주는 viewWillDisappear, viewDidDisappear 메서드가 호출됩니다.

    💡 TableView와 CollectionView의 차이점을 설명하시오.

    Autolayout

    💡 오토레이아웃을 코드로 작성하는 방법은 무엇인가? (3가지)

    ✅ NSLayoutConstraint, Visual Format Language, NSLayoutAnchor 3가지 방법을 이용해서 작성할 수 있다.

    💡 hugging, resistance에 대해서 설명하시오.

    ✅ Hugging은 View가 고유 크기보다 더 커지는 것을 방지하기 위한 것이고 CompressionResistance는 View가 고유 크기보다 작아지는 것을 방지하기 위한 것 입니다.

    🙋‍♂️ NSLayoutConstraint.Priority 중 가장 높은 값은 무엇인가?

    ✅ 1000으로 Required로 표현됩니다.

    💡 Intrinsic Size에 대해서 설명하시오.

    ✅ Intrinsic Size는 AutoLayout에 영향을 받지않지 않는 View의 Content의 고유 크기를 나타냅니다.

    💡 스토리보드를 이용했을때의 장단점을 설명하시오.

    ✅ 스토리보드를 장점으로는 처음 프로젝트를 접하는 사람도 한 눈에 View를 파악할 수 있습니다. 단점으로는 협업 시 conflict 해결이 상당히 어렵고, 프로젝트가 커질수록 Storyboard의 메모리 사용량이 증가하며, View의 property를 수정해야면 Attributes inspector를 통해서 property를 일일이 확인해서 수정해야 하기 때문에 유지 및 보수가 어렵습니다.

    💡 Safearea에 대해서 설명하시오.

    ✅ Safearea는 iOS 11부터 도입됐습니다. Safearea는 시스템에 의해 가려질 수 있는 부분을 제외한 영역입니다. 시스템에 의해 가려질 수 있는 영역이란 상단의 Status Bar, Navagation Bar, 노치 하단의 Tap Bar, Home Indicator를 나타냅니다. 이러한 요소들에 의해서 화면이 가려지지 않고 모든 콘텐츠를 표시할 수 있는 영역이 Safearea입니다.

    💡 Left Constraint 와 Leading Constraint 의 차이점을 설명하시오.

    ✅ Left Constraint는 왼쪽을 나타내며 Leading Constraint는 읽고 쓰는 방향의 시작 지점을 나타냅니다. 즉 Left, Right는 항상 일정한 왼쪽, 오른쪽을 나타내고, Leading, Trailing은 읽고 쓰는 방향이 왼쪽에서 오른쪽으로 인지 오른쪽에서 왼쪽인지에 따라서 변경됩니다.

     

    Swift

    💡 struct와 class와 enum의 차이를 설명하시오.

    ✅ struct와 enum은 값타입이고 class는 참조타입 입니다. class는 상속이 가능하며 타입캐스팅을 통해 상위 타입 또는 하위 타입으로 형변환이 가능합니다.

    💡 class의 성능을 향상 시킬수 있는 방법들을 나열해보시오.

    ✅ 상속이 필요하지 않으면 final 키워드 붙이기, 메서드에 private 키워드 사용하기 -> 정적 디스패치 화

    🙋‍♂️ struct의 성능이 class보다 느려지는 상황들을 나열해보시오.

    struct가 2개 이상의 참조 타입을 가지게 되는 경우 class보다 많은 reference counting overhead를 가지게 됩니다.

    🙋‍♂️ final 키워드를 붙이면 왜 성능이 향상되는지 설명하시오.

    final 키워드를 사용하게 되면 컴파일 시점에 해당 메서드가 어떤 것인지 알 수 있기 때문에 성능이 향상 됩니다.

    🙋‍♂️ Dynamic Dispatch는 왜 필요한 걸까요?

    ✅ Dynamic Dispatch는 다형성을 구현하기 위한 핵심 기능입니다. Dynamic Dispatch는 런타임시 실제 참조되는 타입에 해당하는 프로퍼티 및 메서드를 호출합니다. 이는 class 및 protocol에서 사용되고 있습니다.

    🙋‍♂️ 메서드 인라이닝을 할 수 없는 사례를 들어보시오.

    private, fileprivate 메서드의 경우 사용할 수 없습니다.

    💡 Copy On Write는 어떤 방식으로 동작하는지 설명하시오.

    ✅ 실제 원본이나 복사본이 수정되기 전까지는 같은 리소스를 공유하며, 원본이나 복사본을 수정하면 복사하는 작업을 하는 방식

    🙋‍♂️ Swift에서는 어떤 타입이 Copy On Write를 사용하는지 설명하시오.

    COW는 Collection 타입에서 사용됩니다.

    💡 Convenience init에 대해 설명하시오.

    ✅ Class의 이니셜라이저 중 한 종류로 Class의 보조 이니셜라이저 입니다. Convenience init 미리 지정한 값을 사용하여 최소한의 입력으로 객체의 생성을 제공해주는 이니셜라이저 입니다. Convenience init은 내부에서 같은 Class의 Designated initializer을 반듯이 호출해야 합니다.

    🙋‍♂️ class의 초기화 과정을 설명하시오

    2단계 초기화를 통해서 Class의 초기화가 진행됩니다. 1단계에서는 모든 프로퍼티들에 초기값을 할당합니다. 2단계에서는 초기값으로 할당되면, 해당 인스턴스를 사용할 수 있는 상태가 되어 프로퍼티의 값을 사용자가 정의 할 수 있게 되고 이를 이용하여 프로퍼티의 값을 수정할 수 있습니다.

    🙋‍♂️ Convenience init은 구조체에서 사용할 수 있나요?

    ✅ Convenience 키워드를 가진 init은 구조체에서 사용할 수 없습니다. 하지만 비슷한 역할을 수행하는 init은 구현할 수 있습니다.

    💡 AnyObject에 대해 설명하시오.

    ✅ AnyObject는 모든 클래스가 암시적으로 준수하는 프로토콜로 모든 클래스 타입의 인스턴스를 나타낼 수 있습니다.

    💡 Optional 이란 무엇인지 설명하시오.

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

    💡 Subscripts에 대해 설명하시오.

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

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

    ✅ Instance 메서드와 Class 메서드의 차이점 첫번째는 메서드 호출 시 인스턴스의 필요 여부입니다. Instance 메서드는 호출시 인스턴스가 필요하지만 클래스 메서드는 필요하지 않습니다. 차이점 두번째는 Instance 프로퍼티 사용 여부 입니다. Class 메서드에서는 Type 프로퍼티만 사용이 가능하지만 Instance 메서드는 모두 사용이 가능 합니다. 마지막 차이점으로는 어떤 Type에서 사용할 수 있느냐 입니다. Class 메서드는 Class에서만 사용할 수 있으나 Instance 메서드는 Class, Struct, Enum 모두에서 사용할 수 있습니다.

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

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

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

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

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

    ✅ Delegates와 Notification은 특정 이벤트가 발생했을때 이를 다른 객체에 전달할때 사용됩니다. 두 방법 모두 임의의 객체의 의존하지 않고 이벤트를 전달할 수 있습니다. Delegate는 중간 객체를 거치지않고 두 객체간에 이벤트를 전달합니다. 이러한 특징 때문에 다 수의 객체에 이벤트를 전달하는 것에 어려움이 있습니다. Notification은 Notification Center에 이벤트를 전달하고 Notification Center는 해당 이벤트를 관찰하고 있는 객체에게 전달하는 방식으로 Notification Center라는 중간 객체를 거쳐서 이벤트가 전달됩니다. Notification은 다수의 객체에 이벤트를 전달하는데에 효과적입니다. 하지만 이러한 특징 때문에 상호작용하는 객체간의 관계를 파악하기 어려운 단점이 있습니다.

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

    💡 MVC 구조에 대해 블록 그림을 그리고, 각 역할과 흐름을 설명하시오.

    💡 프로토콜이란 무엇인지 설명하시오.

    ✅ 프로토콜이란 특정 작업이나 기능에 대한 메서드, 프로퍼티 및 요구사항을 나타내는 청사진 입니다.

    💡 Protocol Oriented Programming과 Object Oriented Programming의 차이점을 설명하시오.

    💡 Hashable이 무엇이고, Equatable을 왜 상속해야 하는지 설명하시오.

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

    ✅ 기본적으로 Value Type인 struct와 enum Type은 instance method에 의해서 properties를 수정할 수 없습니다. 그러나 특정 method에서 properties를 수정해야 하는 경우 mutating 키워드를 이용해서 수정할 수 있습니다. mutating method는 변경된 값으로 새로운 객체를 생성하고 새로 생성된 객체가 이전 객체를 대체합니다.

    🙋‍♂️ 상수로 선언된 구조체 인스턴스의 경우 mutating method를 통해 프로퍼티를 변경할 수 있는가?

    ✅ 변경할 수 없습니다.

    🙋‍♂️ enum Type에서 mutating 키워드를 사용하는 경우를 설명하시오.

    ✅ 메서드에서 case를 변경하는 경우 mutating키워드를 사용합니다.

    💡 탈출 클로저에 대하여 설명하시오.

    ✅ 이스케이핑 클로저는 주로 비동기 처리시 CompletionHandler로 사용됩니다. 비동기 함수는 비동기 작업을 시작한 후 반환 됩니다. 하지만 함수의 인자로 전달받은 클로저는 비동기 작업이 끝나기 전까지는 호출되지 않습니다. 비동기 작업이 끝난 후 클로저를 호출하기 위해서는 이스케이핑 키워드를 붙여 해당 클로저를 함수에서 이스케이핑 시켜야 합니다. 즉, 이스케이핑 클로저는 함수의 인자로 전달된 클로저가 언제 사용될 지 모르기 때문에 함수를 이스케이핑한 클로저로, 함수가 반한된 후에도 호출할 수 있는 클로저 입니다.

    💡 Extension에 대해 설명하시오.

    ✅ Extension은 struct, class, enum 및 protocol 타입에 추가적으로 연산 프로퍼티, 메서드, 이니셜라이저, 서브스크립트, 중첩 타입, 프로토콜 채택등의 추가적인 기능을 구현할 수 있는 기능입니다.

    💡 Extension 내부에서 함수를 override할 수 있는지 설명하시오.

    💡 접근 제어자의 종류엔 어떤게 있는지 설명하시오.

    💡 defer란 무엇인지 설명하시오.

    ✅ 특정 함수 또는 메서드 안에서 사용되는 클로저입니다. defer 키워드가 붙은 클로저 부분은 함수 또는 메서드가 종료된 후 호출됩니다. defer를 읽기전에 함수가 종료되면 defer는 실행되지 않습니다. defer가 여러개 존재할 경우 역순으로 실행됩니다. defer안에 또다른 defer들이 존재 할 수 있으며, 맨 바깥쪽부터 실행됩니다.

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

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

    💡 Generic에 대해 설명하시오.

    ✅ 제네릭이란 Swift의 강력한 기능 중 하나로, 타입을 추상적으로 표현하는 것 입니다. 이러한 제네릭은 타입에 의존적이지 않게됩니다. 또한 제네릭을 사용함으로 유연하고 재사용성이 높은 코드를 작성할 수 있습니다.

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

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

    💡 Codable에 대하여 설명하시오.

    ✅ Codable은 Encodable과 Decodable이 합쳐진 단어입니다. Encodable은 Encode할 수 있는 Type이다 라는 의미의 프로토콜로 Encodable을 채택한 Type은 Encoder를 통해서 Data로 Encode할 수 있습니다. Decodable은 Decoder를 이용해서 Decode될 수 있는 Type이다 라는 의미의 프로토콜로 Decodable을 채택한 Type은 Decoder를 통해서 Data에서 해당 Type으로 Decode될 수 있습니다.

    💡 Closure에 대하여 설명하시오.

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

    ARC

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

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

    💡 Strong 과 Weak 참조 방식에 대해 설명하시오.

    💡 순환 참조에 대하여 설명하시오.

    💡 강한 순환 참조 (Strong Reference Cycle) 는 어떤 경우에 발생하는지 설명하시오.

    Functional Programming

    💡 순수함수란 무엇인지 설명하시오.

    💡 함수형 프로그래밍이 무엇인지 설명하시오.

    💡 고차 함수가 무엇인지 설명하시오.

    💡 Swift Standard Library의 map, filter, reduce, compactMap, flatMap에 대하여 설명하시오.

    Architecture

    💡 MVVM, MVI, Ribs, VIP 등 자신이 알고있는 아키텍쳐를 설명하시오.

    💡 의존성 주입에 대하여 설명하시오.

    SwiftUI

    💡 @State에 대해서 설명하시오.

    Combine

    💡 PassthroughSubject에 대해서 설명하시오

    💡 @Published에 대해서 설명하시오

    💡 AnyCancellable에 대해서 설명하시오

    💡 sink에 대해서 설명하시오

    💡 throttle과 debounce의 차이점을 설명하시오.

    💡 Data를 Binding 하는 방법에 대해서 설명하시오.

    Optional

    아래부터는 추가로 공부를 하면 좋을 내용들입니다.

    Objective-c나 rx는 회사, 팀마다 사용하는곳이 차이가있고 신입이나 주니어기준으로 필수라고 여겨지지않기에 옵셔널에 추가하였습니다.

    Rx

    💡 Reactive Programming이 무엇인지 설명하시오.

    💡 RxSwift를 왜 사용하는지 설명하시오.

    💡 RxSwift의 단점을 설명하시오.

    💡 RxSwift에서 Hot Observable과 Cold Observable의 차이를 설명하시오.

    💡 Subject의 종류와 차이점에 대해 설명하시오.

    💡 Subject와 Driver의 차이를 설명하시오.

    💡 Single, Completable, Maybe의 차이점에 대해 설명하고, 언제 적용하면 좋을지 설명하시오.

    MRC

    💡 ARC 대신 Manual Reference Count 방식으로 구현할 때 꼭 사용해야 하는 메서드들을 쓰고 역할을 설명하시오.

    💡 retain 과 assign 의 차이점을 설명하시오.

    💡 특정 객체를 autorelease 하기 위해 필요한 사항과 과정을 설명하시오.

    💡 Autorelease Pool을 사용해야 하는 상황을 두 가지 이상 예로 들어 설명하시오.

    💡 다음 코드를 실행하면 어떤 일이 발생할까 추측해서 설명하시오. Ball *ball = [[[[Ball alloc] init] autorelease] autorelease];

    Advanced

    💡 method swizzling이 무엇이고, 어떨 때 사용하는지 설명하시오.

    💡 NSCoder 클래스는 어떤 상황에서 어떻게 써야 하는지 설명하시오.

    💡 Responder Chain 구조에 대해 설명하고, First Responder 역할에 대해 설명하시오.

    💡 NSObject부터 UIButton 까지 상속 과정의 계층과 역할을 설명하시오.

    💡 shallow copy와 deep copy의 차이점을 설명하시오.

    💡 Push Notification 방식에 대해 설명하시오.

    💡 Foundation 과 Core Foundation 프레임워크의 차이점을 설명하시오.

    💡 NSURLConnection 에서 사용하는 Delegate 메서드들에 대해 설명하시오.

    💡 Synchronous 방식과 Asynchronous 방식으로 URL Connection을 처리할 경우의 장단점을 비교하시오.

    💡 Plist 파일 구조와 Plist 파일에 저장된 데이터를 다루기 적합한 클래스를 설명하시오.

    💡 Core Data와 Sqlite 같은 데이터 베이스의 차이점을 설명하시오.

    💡 JSON 데이터를 처리하는 방식과 파서, 객체 변환 방식에 대해 설명하시오.

    💡 웹 서버와 HTTP 연결을 사용해서 데이터를 주거나 받으려면 사용해야 하는 클래스와 동작을 설명하시오.

    💡 Protocol에서는 왜 var만 되는지 설명하시요.

    💡 DispatchQueue.main.sync를 사용하는 상황을 설명하시오.

    💡 Run Loops에 대해 설명하시오.

    Objective-C

    💡 Swift의 클로저와 Objective-C의 블록은 어떤 차이가 있는가?

    💡 Mutable 객체과 Immutable 객체는 어떤것이 있는지 예를 들고, 차이점을 설명하시오.

    💡 dynamic과 property 의미와 차이를 설명하시오.

    💡 @property로 선언한 NSString* title 의 getter/setter 메서드를 구현해보시오.

    💡 @property에서 atomic과 nonatomic 차이점을 설명하고, 어떤것이 안전한지, 어느것이 기본인지 설명하시오.

    💡 @property로 선언한다는 것의 의미를 설명하고, .h에 넣을 경우와 .m에 넣을 경우 차이점을 설명하시오.

    💡 -performSelector:withObject:afterDelay: 메시지를 보내면 인자값의 객체는 retain되는가? 그 이유를 함께 설명하시오.

    💡 Objective-C 에서 캡슐화된 데이터를 접근하기 위한 방법들을 설명하시오.

    💡 Fast Enumeration 이란 무엇인지 설명하시오.

    💡 unnamed category 방식에 대해 설명하시오.

    💡 Category 확장과 Subclass 확장의 차이점을 설명하시오.

    💡 Category 방식에 대해 설명하시오.

    💡 Objective-C 에서 Protocol 이란 무엇인지 설명하시오.

    💡 Objective-C++ 방식이 무엇인지 설명하고, 어떤 경우 사용해야 하는지 설명하시오.

     

    피드백 환영!!

    참조

    https://github.com/JeaSungLEE/iOSInterviewquestions

Designed by Tistory.