24.09.27 Today I Learned

2024. 9. 27. 18:47

모의 면접 준비

UIKit

 

1. clipToBounds에 대한 설명

clipToBounds는 뷰의 경계를 넘는 서브뷰가 잘릴지 말지 결정하는 프로퍼티임.

true로 설정하면 뷰 경계를 벗어나는 서브뷰 부분은 안 보임. false로 설정하면 뷰의 경계를 넘어서도 서브뷰가 보임.

 

2. UIKit 클래스들을 다룰 때 꼭 처리해야 하는 애플리케이션 스레드 이름은 무엇인지 설명

메인 스레드는 앱의 UI 업데이트나 사용자 입력 이벤트를 처리하는 역할을 담당하는데, 여기서 벗어나서 다른 스레드에서 UIKit 관련 작업을 하면 UI가 제대로 동작하지 않거나, 앱이 비정상적으로 종료될 수 있음.

예를 들어, UILabel의 텍스트를 업데이트하거나 UIView의 색상을 변경하는 등의 모든 UI 관련 작업은 무조건 메인 스레드에서 실행되어야 함. 그래서 비동기 작업을 할 때도 UI를 업데이트하려면 DispatchQueue.main.async 등을 사용해서 메인 스레드로 돌아와서 처리해야 함.

 

3. UIViewController의 LifeCycle에 대해서 설명

UIViewController의 생명주기는 크게 다음과 같은 순서로 진행됨

  • viewDidLoad: 뷰가 메모리에 로드되었을 때 호출됨. 뷰가 생성되고 나서 최초로 한 번만 호출됨.
  • viewWillAppear: 뷰가 화면에 나타나기 직전에 호출됨.
  • viewDidAppear: 뷰가 화면에 완전히 나타난 후에 호출됨.
  • viewWillDisappear: 뷰가 사라지기 직전에 호출됨.
  • viewDidDisappear: 뷰가 화면에서 완전히 사라진 후에 호출됨.

 

4. viewDidLoad는 다른 화면으로 이동했다가 다시 돌아왔을 때 호출되는지

다시 호출 되지 않음. viewDidLoad는 뷰 컨트롤러가 메모리에 처음 로드될 때 한 번만 호출됨. 다른 화면으로 갔다가 돌아와도 호출되지 않고, 대신 viewWillAppear나 viewDidAppear가 호출됨.

 

5. UITableView를 사용해본 적 있는지

연락처 목록, 채팅 목록, 쇼핑 아이템 리스트 같은 걸 보여줄 때 사용함

사용하려면 먼저 UITableView를 화면에 추가한 다음에, dataSource랑 delegate라는 두 가지 역할을 설정해줘야 함. dataSource는 테이블 뷰에 어떤 데이터가 어떻게 보여질지 관리하고, delegate는 테이블 뷰의 행동을 관리함.

dataSource는 최소한 두 가지 정보를 꼭 알려줘야 하는데, 몇 개의 셀을 보여줄 건지와 각 셀에 어떤 데이터를 표시할 건지 알려줘야 함. 이렇게 해야 테이블 뷰가 몇 줄을 보여줄지, 각 줄에 어떤 내용이 들어갈지를 알 수 있음.

delegate는 선택적으로 사용할 수 있는데, 주로 셀이 선택됐을 때 어떤 동작을 할지, 셀의 높이를 어떻게 할지 등 테이블 뷰와의 상호작용을 정의할 때 사용함.

이렇게 UITableView를 사용하면 리스트 형태의 데이터를 유연하고 효율적으로 보여줄 수 있음.

 

6. UITableView를 구현하기 위해서 dataSource를 사용할 때 필수적으로 구현해야 되는 함수에 대해서 설명

UITableViewDataSource 프로토콜을 준수하려면 최소한 다음 두 개의 메서드는 구현해야 함

  • tableView(_:numberOfRowsInSection:): 섹션당 몇 개의 행을 표시할지 반환해야 함.
  • tableView(_:cellForRowAt:): 각 행에 표시할 셀을 반환해야 함.

 

7. 화면 전환 push와 present의 차이점에 대해서 설명

  • push: UINavigationController를 이용해 뷰 컨트롤러를 화면에 쌓는 방식임. 내비게이션 스택에 추가되며, "뒤로 가기" 기능이 자동으로 제공됨.
  • present: 현재 화면 위에 새로운 뷰 컨트롤러를 모달로 띄움. 내비게이션 스택에 추가되지 않고, 모달 형태로 나타남.

 

8. UINavigationController가 아닌 UIViewController에서 push를 하면 어떻게 되는지

UINavigationController가 아닌 UIViewController에서는 push를 사용할 수 없음. UINavigationController 안에서만 동작함.

그 이유는 push 메서드가 UINavigationController에 종속된 기능이기 때문임.

push는 새로운 뷰 컨트롤러를 내비게이션 스택에 쌓아 올려서 화면을 전환하는 방식인데, 이 스택 구조를 관리하는 주체가 바로 UINavigationController임. UIViewController 자체는 이 스택 관리 기능이 없어서 push를 직접 수행할 수 없음.

따라서 화면을 push 방식으로 전환하려면 반드시 해당 뷰 컨트롤러가 UINavigationController에 포함되어 있어야 함. 만약 UINavigationController 없이 UIViewController에서 push를 시도하면 동작하지 않거나 에러가 발생함.

 

9. UINavigationController는 여러 개의 ViewController를 관리함. push와 pop을 사용하여 새로운 화면을 띄우거나 종료하는데, 어떤 자료구조를 사용해서 ViewController를 관리하면 편한지

스택(Stack) 자료구조를 사용하면 편함. push로 새로운 뷰 컨트롤러를 스택에 쌓고, pop으로 마지막에 쌓인 뷰 컨트롤러를 제거하는 방식임.

 

10. AutoLayout에서 Leading Constraint와 Left Constraint의 차이점에 대해서 설명

  • Leading Constraint: 언어 방향에 따라 달라짐. LTR(Left-to-Right) 언어에서는 왼쪽을, RTL(Right-to-Left) 언어에서는 오른쪽을 의미함.
  • Left Constraint: 항상 왼쪽을 기준으로 함. 언어 방향에 상관없이 고정적임.

추가로 trailing은 leading의 반대 개념으로 뷰의 오른쪽 끝점을 의미하여 한국어, 일본어, 영어 등은 leading, 아랍어나 히브리어는 trailing 이 맞음

 

11. Safe Area에 대해서 설명

Safe Area는 아이폰의 노치, 홈 인디케이터, 상태 바 등으로 인해 콘텐츠가 가려지지 않도록 안전하게 표시될 수 있는 영역임. 이 영역 내에서 뷰를 배치해야 모든 디바이스에서 콘텐츠가 잘려나가지 않음.


디자인 패턴 / RxSwift

 

1. 싱글톤 패턴에 대해서 설명

싱글톤 패턴은 앱 전체에서 하나의 인스턴스만 생성해서 공유하는 디자인 패턴임. 어떤 클래스의 객체가 하나만 존재해야 하고, 어디서든지 이 객체에 접근할 수 있어야 할 때 사용함. 인스턴스가 여러 개 만들어지는 걸 방지하고, 전역적으로 접근이 필요할 때 사용하면 유용함.

 

2. 델리게이트 패턴에 대해서 설명

델리게이트 패턴은 어떤 객체의 동작을 다른 객체에 위임하는 디자인 패턴임. 특정 이벤트나 동작이 발생했을 때 그 처리를 다른 객체에 맡기는 방식임. 주로 iOS에서 이벤트나 데이터를 전달할 때 많이 사용하며, 프로토콜을 통해 구현됨.

 

3. iOS에서 제공하는 싱글톤 패턴을 적용한 것들 예시

  • UserDefaults: 앱 전체에서 하나의 설정 저장소로 사용함.
  • UIApplication: 앱의 상태를 관리하는 싱글톤 객체임.
  • FileManager: 파일 시스템을 관리하는 객체로, 하나의 인스턴스만 사용됨.
  • URLSession.shared: 네트워크 요청을 처리하는 공유 인스턴스임.

 

4. MVC에 대해서 설명

MVC는 Model-View-Controller의 약자로, 애플리케이션을 세 가지 역할로 나누는 디자인 패턴임.

  • Model: 데이터와 관련된 로직을 처리함.
  • View: 사용자에게 보여지는 UI를 담당함.
  • Controller: Model과 View를 연결해주며, 사용자 입력을 처리하고 그에 따라 Model을 업데이트하거나 View를 갱신함.

 

5. MVVM에 대해서 설명

MVVM은 Model-View-ViewModel의 약자로, MVC의 단점을 보완한 디자인 패턴임.

  • Model: 데이터와 관련된 로직을 처리함.
  • View: 사용자에게 보여지는 UI를 담당함.
  • ViewModel: View와 Model 사이에서 데이터를 변환하고 바인딩하는 역할을 함. View의 상태와 로직을 분리해줌.

 

6. MVVM에서 바인딩을 위해서 어떤 방법을 써보았는지

  • RxSwift: 리액티브 프로그래밍을 활용해 바인딩을 구현함
  • Combine: 애플에서 제공하는 프레임워크로, MVVM의 바인딩을 처리하는 데 사용함

 

7. MVC와 MVVM의 차이점에 대해서 설명

  • 역할 분리: MVC는 Controller에 많은 로직이 집중되기 쉬워서 유지보수가 어려움. MVVM은 ViewModel을 통해 로직을 분리해주기 때문에 유지보수가 더 쉬움.
  • 데이터 바인딩: MVVM은 ViewModel을 통해 View와 데이터를 바인딩하는데, 이는 UI 업데이트를 더 간결하게 만듦. 반면에 MVC는 수동으로 View를 업데이트해야 함.

 

8. RxSwift에 대해서 설명

RxSwift는 리액티브 프로그래밍을 iOS에 적용한 라이브러리임. 비동기 데이터 스트림을 다루기 쉽게 만들어주며, Observable을 통해 데이터의 변화를 감지하고 처리할 수 있음. 주로 MVVM 패턴과 함께 사용되어 데이터 바인딩을 간단하게 해줌.

 

9. 옵저버 패턴에 대해서 설명

옵저버 패턴은 객체 간의 의존성을 정의하는 디자인 패턴으로, 한 객체의 상태가 변하면 의존하고 있는 다른 객체들이 자동으로 그 변화를 감지하는 방식임. 주로 이벤트나 상태 변화에 대한 알림을 전달할 때 사용함.

 

10. Observable과 Observer에 대해서 설명

  • Observable: 데이터의 변화를 감지하고, 그 변화를 Observer에게 전달하는 역할을 하는 것임. 일종의 데이터 스트림이라고 생각하면 됨.
  • Observer: Observable을 구독(subscribe)하고, 데이터가 변할 때마다 그 변화를 받아 처리하는 역할을 하는 것임.

 

11. Subject에 대해서 설명

Subject는 Observable이면서 동시에 Observer 역할을 하는 특별한 타입임. 즉, 데이터를 방출하는 동시에 다른 Observable로부터 데이터를 받을 수도 있음. 대표적으로 PublishSubject, BehaviorSubject, ReplaySubject, AsyncSubject 등이 있음.

 

12. Cold Observable과 Hot Observable에 대해서 설명

  • Cold Observable: 구독이 시작될 때마다 새로운 데이터 스트림을 생성함. 즉, Observer가 구독할 때 데이터를 생성하고 방출함.
  • Hot Observable: 이미 데이터 스트림을 생성하고 데이터를 방출하고 있음. 새로운 Observer가 구독하더라도 이미 진행 중인 데이터 스트림을 그대로 받음.

'Today I Learned > 2024' 카테고리의 다른 글

24.10.29 Today I Learned  (0) 2024.10.29
24.10.15 Today I Learned  (1) 2024.10.15
24.09.13 Today I Learned  (0) 2024.09.13
24.09.12 Today I Learned  (0) 2024.09.12
24.09.10 Today I Learned  (0) 2024.09.10

BELATED ARTICLES

more