면접스터디 9W

apwierk·2022년 12월 26일
1

개인 공부

목록 보기
17/20

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

: UIKit이다.

UIKit

: iOS Application의 cocoaTouch에서 User Interface를 구현하고 이벤트를 관리하는 프레임워크

  • UIKit Framework는 Gesture 처리, Animation, 그림 그리기, 이미지 처리, 텍스트 처리 등 User Event 처리를
  • TableView, Slider, Button, TextField, Alert 등 Application의 화면을 구성하는 요소 포함
  • UIResponder에서 파생된 클래스나 User Interface에 관련된 클래스는 Application의 Main Thread (Main Dispatch Queue)에서만 사용해야 함
  • iOS, tvOS에 사용

User Interface

  • View and Control : 화면에 콘텐츠 표시
  • View Controller : 사용자 인터페이스 관리
  • Animation and Haptics : 애니메이션과 햅틱을 통한 피드백 제공
  • Window and Screen : 뷰 계층을 위한 윈도우 제공

User Action

  • Touch, Press, Gesture : 제스처 인식기를 통한 이벤트 처리 로직
  • Drag and Drop : 화면 위에서 드래그 앤 드롭 기능
  • Pencil Action : 애플 펜슬의 더블 탭 동작
  • Focus Animation : 원격 또는 게임 컨트롤러 사용
  • Peek and Pop : 3D 터치에 대응한 미리 보기 기능
  • Keyboard and Menu : 키보드 입력 처리 및 사용자 정의 메뉴 표시

Text

  • Text Display and Font : UIKit View를 사용한 텍스트 표시, 폰트 관리, 맞춤법 검사
  • Text Storage : 텍스트 스토리지를 관리하고 텍스트 레이아웃 조정
  • Keyboard and Input : 시스템 키보드를 설정하거나 직접 키보드를 만들어 입력 처리
  • Handwriting Recognition : 애플 펜슬로 텍스트 필드와 커스텀 뷰를 통해 입력받는 텍스트를 감지

https://github.com/iOS-SOPT-iNNovation/iOS_Traning/issues/10

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

Foundation Kit은 Cocoa Touch framework에 포함되어 있는 프레임워크 중 하나다. String, Int 등의 원시 데이터 타입과 컬렉션 타입 및 운영체제 서비스를 사용해 앱의 기본적인 기능을 관리하는 프레임워크이다.

iterator, jsonEncoder, jsonDecoder 과 같은 데이터 관련 클래스가 정의되어 있습니다.

iterator: 배열이나 그와 유사한 자료 구조의 내부의 요소를 순회(traversing)하는 객체이다.
jsonEncoder: 데이터 유형의 인스턴스에서 JSON 개체로 변환하는 객체
jsonDecoder: JSON 개체에서 데이터 유형의 인스턴스로 변환하는 객체

https://velog.io/@gnjs224/Foundation-Kit

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

Main Thread

: Cocoa Touch 어플리케이션은 UIApplication의 인스턴스가 main thread에 attach된다.
main thread는 UIApplication으로부터 만들어지고, UIApplication은 앱이 처음 시작될 때 인스턴스화 되는 앱의 첫 시작 부분이다.
UIApplication은 어플리케이션 run loop를 포함한 main event loop를 세팅하고이벤트 처리를 한다.
어플리케이션의 main event loop는 touch, gesture같은 모든 UI 이벤트들을 받는다.

어플리케이션 UI 이벤트는 UIApplication->UIWindow->UIViewController->UIView->subviews(UIButton,etc.) 와 같은 response chain에 따라 UIResponse에 전달된다.
UIResponder는 버튼 press, tap, 확대 축소, swipe 등의 UI 변경으로 인식되는 이벤트를 다룬다.
이러한 이벤트들이 main thread에서 발생하므로 응답자가 포함된 UIKit 프레임워크는 main thread에서 작동해야 한다.

왜 main.sync는 동작하지 않을까?

main queue는 하나의 task가 끝나야 다음 task를 실행하는 serial queue이다.
그리고 sync는 task가 끝날 때까지 다음 task를 실행하지 않고 queue를 block한 뒤 task가 완료될 때까지 기다린다.
main.sync가 되면 queue가 block 상태가 되고 task가 끝날 때까지 기다린다. 하지만 main queue는 이미 block 상태이므로 task를 실행할 수 없다. deadlock

하지만 직접 serial queue를 만들어서 sync로 처리하면 잘 작동하는 것을 볼 수 있다.

왜 main queue만 작동되지 않을까?

main thread는 thread-safe하지 않기 때문이다.
모든 UIKit 관련 작업들이 thread-safe는 아니다. 일부분은 safe하고 일부분은 safe하지 않다.

thread-safe는 말 그대로 thread로부터 보호하는 것이다. main thread가 thread-safe하지 않는 것은 애플의 디자인 결정이라고 한다..
thread-safe로 thread를 만들면 성능 면에서 별로 좋지 않고, 오버 헤드가 커지기 때문이다.

결론적으로 UIKit이 main thread에 attach 되어 있으면 concurrent 프로그램을 작성하고 UIKit을 사용하는 것이 쉽다.

왜 Main Thread를 이용할까?

UIKit은 Thread-safe 하지 않습니다. 그래서 모든 처리를 Serial 하게 처리해야 합니다. 그래서 UI는 Main Thread 에서 synchronously 하게 동작해야 합니다.

당신이해야 할 일은 항상 UIKit에 대한 호출이 항상 main thread에서 이루어 지도록하는 것입니다. 따라서 UIKit 객체가 main thread에서 액세스되어야한다는 사실은, 성능에 유리하도록 한 apple의 디자인 결정입니다

그리고 많은 background thread 에서 UI를 update 하게 되면 각각의 스레드가 서로 다른 rendering 정보를 처리하기 때문에 많은 transaction 을 처리해야 합니다. 이러한 rendering 은 GPU가 처리할 수 없는 transaction 의 한계를 넘게 됩니다.

https://github.com/iOS-SOPT-iNNovation/iOS_Traning/issues/16

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

App Bundle

: 개발자가 생성하는 가장 일반적인 유형의 번들로, 어플리케이션의 성공적인 작동에 필요한 모든 것들을 저장한다. 구조는 어플리케이션 플랫폼이 iOS냐 MacOS냐에 따라 다르지만, 사용하는 방법은 동일하다.

앱 번들의 구성요소

앱 번들에는 Info.plist, 실행파일, 리소스 파일, 기타 서포트 파일 등이 포함되어있는데 각각 아래와 같은 역할을 수행한다.

Info.plist

어플리케이션에 대한 구성 정보가 들어있는 구조화된 파일로, 시스템은 이 파일에 의존하여 어플리케이션 및 파일에 대한 관련 정보를 식별한다.

실행파일

모든 응용 프로그램에 존재하는 실행파일로 어플리케이션의 메인 entry point와 어플리케이션 타겟에 정적으로 연결된 모든 코드가 포함되어 있다.

리소스 파일

리소스는 어플리케이션의 실행 파일 외부에 있는 데이터 파일이다. 리소스는 일반적으로 이미지, 아이콘, 소리, nib파일, 문자열 파일, 설정 파일 및 데이터 파일 등으로 구성된다. 대부분 localized될 수 있다.

기타 서포트 파일

커스텀 데이터 리소스 등이 포함 되어있다.

iOS의 번들 구조를 이해하면 사용자 지정 파일을 저장할 위치를 결정하는데 도움이 된다. iOS 어플의 번들 구조는 모바일 장치에 적합하게 이루어져 있다. 외부 디렉토리가 거의 없는 평평한 구조를 사용하여 디스크 공간을 절약하고 파일에 대한 접근과정을 간소화한다.
https://neph3779.github.io

profile
iOS 꿈나무 개발자

0개의 댓글