iOS 4기 면접 예상 질문
1. clipToBounds에 대해서 설명해주세요.
clipTOBounds 는 UIView의 속성 중 하나로, 해당 뷰의 경계를 기준으로 그 안에 있는 하위 뷰들의 영역을 잘라내는 역할을 한다.
2. UIKit 클래스들을 다룰 때 꼭 처리해야하는 애플리케이션 쓰레드 이름은 무엇인가요?
UIKit에서 UI 관련 작업은 반드시 메인 쓰레드를 통해서 작업을 해야 한다. 그렇지 않으면 어플에서 에러가 발생할 수 있다.
3. UIViewController의 LifeCycle에 대해서 설명해주세요.
viewDidLoad, ViewWillAppear, ViewDidAppear, ViewWillDisapper, ViewDidDisapper, deinit 이 있다.
뷰 컨트롤러가 메모리에 로드될 때 호출
뷰가 화면에 나타나기 직전에 호출
뷰가 화면에 완전히 나타난 이후 호출
뷰가 화면에서 사라지기 직전에 호출
뷰가 화면에서 완전히 사라진 후 호출
뷰 컨트롤러가 메모리에서 해제될 때 호출
4. viewDidLoad는 다른화면으로 이동했다가 다시 돌아왔을 때 호출이 되나요?
아니요, 그건 ViewWillAppear 이고, viewDidLoad 는 뷰컨트롤러가 메모리에 호출될 때 불리기 때문에 다시 불리지 않습니다.
5. UITableView를 사용해보셨나요?
네
6. UITableView를 구현하기 위해서 dataSource를 사용하셨을텐데 필수적으로 구현해야 되는 함수에 대해서 설명해주세요.
numberOfRowsInSection : 테이블 뷰 섹션당 몇 개의 행이 있는지 반환하는 메서드
cellForRowAt : 특정 행에 표시할 셀을 반환한다.
7. 화면전환 push와 present 차이점에 대해서 설명해주세요.
push : UiNavigationConteroller 에서 사용되며, 새로운 화면이 등장할 때 기존 화면은 stack에 쌓인채(메모리에 남아있는채) 새로운 화면이 등장한다. 또한 히스토리가 쌓인채 올라가기 때문에 pop 을 통해 이전 화면으로 돌아올 수 있다.
persent : 새로운 화면을 모달 형식으로 올리는 방식이다. dissmiss 로 화면을 닫을 수 있으며, push 처럼 네비게이션 스택을 사용하지 않는다.
8. UINavigationController가 아닌 UIViewController에서 push를 하면 어떻게 되나요?
push 는 네비게이션 컨트롤러에서만 사용되는 메서드기 때문에 앱에서 오류가 발생하게된다.
9. UINavigationController는 여러개의 ViewController를 관리합니다. push와 pop을 사용하여 새로운 화면을 띄우거나 종료하거나 합니다. 어떤 자료구조를 사용해서 ViewController를 관리하면 편할까요?
stack 을 사용하는게 좋다. 기존의 화면은 아래 깔리고, 새로운 화면은 위에 추가되며 pop 을 통해 메모리에서 해제하면 그 이전 화면이 나오기 때문이다.
10. Autolayout에서 Leading Constraint 와 Left Constraint의 차이점은 무엇인가요?
Leading Constraint 는 언어의 방향성을 고려한 기준으로, 왼쪽에서 오른쪽으로 쓰는 언어는 Left Constraint 와 같이 보이지만, 오른쪽에서 왼쪽으로 쓰는 언어의 경우 Leading 은 오른쪽을 의미한다.
Left Constraint 는 인터페이스의 왼쪽에 고정된 기준이다.
11. Safe Area에 대해서 설명해주세요.
iOS 11 이후 도입된 개념으로, 앱의 UI 요소가 시스템 UI 와 겹치지 않도록 보장하는 영역을 말한다.
1. 싱글톤 패턴에 대해서 설명해주세요.
싱글톤 패턴은 특정 클래스의 인스턴스가 단 하나만 생성되고, 이 인스턴스는 어디서든 접근이 가능할 수 있도록 보장하는 디자인 패턴이다. 싱글톤 패턴은 전역 상태를 관리하거나, 시스템 리소스 접근을 단일화 할 때 유용하다. iOS 의 경우 네트워크 및 데이터베이스 접근 등에서 자주 사용된다.
2. 딜리게이트패턴에 대해서 설명해주세요.
딜리게이트 패턴은 객체 간의 상호 작용을 위임하는 디자인 패턴이다. 하나의 객체가 특정 작업을 다른 객체에 위임하여 대신 처리하게 하는 방식으로, 주로 iOS 에서 많이 사용된다. 특히 프로토콜을 통해 두 객체간의 결합도를 낮추고, 객체 간의 커뮤니케이션을 캡슐화 할 수 있다, 또한 유연하게 동작을 변경할 수 있다는 특징이 존재한다.
3. iOS에서 제공하는 싱글톤패턴을 적용한 것들은 어떤게 있는지 예를 들어주세요.
UIApplication.shared, UserDefaults.shared, FileManager.default, URLSession.shared 등이 존재한다.
앱의 전역 상태를 관리
앱의 기본 설정을 저장하고 불러오는 역할
파일 및 디렉토리 관리
네트워크 작업을 위한 URL 세션
4. MVC에 대해서 설명해주세요
MVC 디자인 패턴은 Model, View, Controller 로 분류 되는데 각각의 역할은 아래와 같다.
Model : 데이터와 그 데이터를 처리하는 로직
View : 사용자 인터페이스 담당
Controller : Model 과 View 를 연결하고 사용자 입력을 처리
5. MVVM에 대해서 설명해주세요.
MVVM 디자인 패턴은 Model, ViewModel, View 로 분류 되는데 각각의 역할은 아래와 같다.
Model : 데이터를 담당
View : 사용자 인터페이스
ViewModel : View 와 Model 사이의 중간자로, 뷰와 데이터를 바인딩 하며 UI 로직을 처리한다.
6. MVVM에서 바인딩을 위해서 어떤 방법을 써보셨나요?
RxSwift 를 사용해본적이 있다. 이는 반응형 프로그래밍을 위한 라이브러리로, Observable 과 Bonder 를 사용해 뷰와 데이터를 바인딩한다.
7. MVC와 MVVM의 차이점에 대해서 설명해주세요.
MVC 패턴은 Controller 에서 모든 UI와 로직을 처리하기 때문에 복잡해질 수 있고, 뷰와 모델 사이의 데이터 흐름이 직접적이어서 연결이 강하게 되어있다. 그에 비해 MVVM 은 ViewModel 이 중간자 역할을 하며 뷰와 모델이 결합도를 낮춰준다. ViewModel 은 데이터 바인딩을 통해 UI 업데이트를 자동으로 처리할 수 있어 재사용성이 높다는 장점이 존재한다.
8. RxSwift에 대해서 설명해주세요.
iOS 에서 반응형 프로그래밍을 구현하기 위한 라이브러리로, 데이터 스트림을 다루며, Observable, Observer 등을 사용해 비동기 이벤트나 데이터를 처리한다. RxSwift 는 데이터를 감지하고, 해당 데이터를 처리하며, 이를 통해 복잡한 비동기 작업을 쉽게 처리할 수 있다.
9. 옵저버패턴에 대해서 설명해주세요.
옵저버 패턴은 객체간의 일대다 의존 관계를 설정하여, 어떤 객체의 상태 변화가 발생하면 이를 의존하고 있는 다른 객체들에게 자동으로 통보하는 디자인 패턴이다. 옵저버는 주체 객체의 상태를 관찰하고 있다가 상태가 변화하면 해당 변화를 처리하는 동작을 수행한다.
10. Obsevable과 Observer에 대해서 설명해주세요.
Observable 은 데이터를 방출하는 객체로,이벤트나 데이터를 지속적으로 생성한다. Observable 은 Observer 가 등록된 상태에서 데이터를 방출한다.
Observer 는 Observable 에서 방출된 데이털르 구독하는 객체이다. Observer 는 방출된 데이터를 받아서 처리한다. RxSwift 에서는 onNext, onError, onCompleted 를 통해 데이터 흐름을 처리한다.
11. Subject에 대해서 설명해주세요.
Subject 는 Observable 과 Observer 의 역할을 동시에 수행할 수 있는 특수한 객체이다. Subject 는 데이터를 방출하는 동시에 다른 Observable 로부터 데이터를 받아 처리할 수 있다.
publishSubject : 구독을 시작한 시점 이후의 데이터만 방출
BehaviorSubject : 가장 최근에 방출한 데이터와 이후의 데이터를 방출
12. Cold Observable과 Hot Observable에 대해서 설명해주세요.
Cold Observable : 구독자가 있을 때만 데이터를 방출한다. 여러 구독자들은 각기 독립적인 데이터 흐름을 받는다. 예를 들어, URLSession 의 네트워크 요청이 이에 해당한다. 각 구독자마다 요청이 따로 발생한다.
Hot Observable : 이미 데이터 스트림을 생성하고 있으며, 구독 여부와 관계없이 데이터를 방출한다. 새로운 구독자도 현재 진행 중인 데이터 스트림을 이어 받아 처리할 수 있다. 에를 들어, 이벤트 스트림은 이미 시작한 상태에서 구독자들이 중간부터 데이터를 받는다.
'TIL(Today I Learned)' 카테고리의 다른 글
| 2024.12.17 Today I Learned (3) | 2024.12.17 |
|---|---|
| 2024.10.13 Today I Learned (1) | 2024.10.13 |
| Today I Learned 2024.09.03 (2) | 2024.09.03 |
| 2024.08.01 Today I Learned (1) | 2024.08.01 |
| 2024.07.29 Today I Learned (0) | 2024.07.29 |