# 모의 면접
## Singleton 디자인 패턴을 활용하는 경우를 예를 들어 설명해주시오.
+ `UIApplication` , `NotificationCenter` , `URLSession`, `URLCache`
+ 혹시 다른 클래스에서 NSCache 타입의 변수를 선언하면 클래스가 메모리에서 해제되거나 초기화될 때 캐시도 초기화되므로 싱글톤을 통해서 실수로 초기화하는 일이 없게 하기 위해서
+ NotificationCenter.default를 사용하면 앱 전체에서 해당 알림을 광범위하게 관찰할 수 있기 때문에 defualt는 Singleton 패턴으로 구현되어 있다.
+ UIApplication은 앱에서 하나만 존재해야 하기 때문에 싱글톤 패턴으로 구현되어 있다.
## 싱글턴 디자인 패턴의 장단점을 설명해주세요
- 장점
- 인스턴스를 최초 1회만 생성하므로 메모리와 성능 측면에서 효율이 좋다
- 클래스 간 데이터 공유가 쉽다.
- 인스턴스가 1개라는 것을 보증받는다.(Thread Safe)
- 단점
- 싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우 다른 클래스의 인스턴스들 간에 결합도가 높아져 개방-폐쇄 원직을 위배하게 된다.
⇒ 수정과 테스트가 어려워진다.
### 꼬리 질문
Q1. 싱글톤 패턴으로 구현된 객체를 인스턴스화하지 않기 위해서는 어떤 방법을 사용해야 할까요?
- private init을 사용한다.
Q2. 인스턴스들 간에 결합도를 낮추기 위해서는 어떻게 해야 할까?
- 추상화된 객체를 의존하게 만들면 결합도를 낮출 수 있다.
---
## Custom View를 구현하려면 어떻게 해야하는지 설명해주세요
- UIView를 상속받아 Custom View를 구현할 수 있다. ( 코드 )
- 인스턴스화해서 사용
- 만약 CustomView를 ViewController의 루트 뷰로 사용하고 싶다면 loadView를 override해 설정한다. 일반적으로 ViewController의 view는 디폴드 값이 nil이다. loadView를 자동으로 호출 해 view를 할당한다.
- xib를 이용해 Custom View 구현
- xib와 swift 파일을 연결해 주어야 한다.
- xib 파일을 열어 File’s Owner를 클리하면 File’s Owner의 Class를 지정할 수 있다.
- CustomView.swift 를 초기화 해준다.
- 인스턴스로 CustomView를 생성하는게 아니기 때문에 required init 함수가 실행된다.
- Bundle의 loadNibNamed는 메서드를 이용해 .xib에서 구성한 View를 nib 형태로 불러온다.
### 꼬리 질문
Q1. 각각 방법의 장단점

Q2. xib 파일은 어떤 파일인가요?
- Xib이란 Xcode Interface Builder의 약자로 Nib 파일을 XML형식으로 변환한 파일
- nib파일이란 인터페이스 빌더에서 만든 UI관련 객체 및 속성 연결정보를 바이너리 형태로 저장한 파일
## Core Graphics에 대해 설명해주세요
- Core Graphics 는 Quartz 엔진을 사용해 2D 렌더링을 제공한다. Core Graphics를 사용하면 path기반으로 그리기, 색상 관리, 패턴, 기울기 및 음영, 이미지 생성, PDF 문서 생성등을 처리할 수 있다.
- 코어 그래픽스란 Quarts를 기반으로 하여 2차원 그래픽을 그릴 수 있도록 제공하는 그래픽 라이브러리이다.
## Core Graphics의 context에 대해 설명해주세요.
- Core Graphics context에는 응용 프로그램의 창, 비트맵 이미지. PDF 문서 또는 프린터 등 페이지의 그림을 대상으로 렌더링하는 데 필요한 정보가 들어 있다.
- context 그릴 정보를 담아두는 곳, 쉽게 말해 그림을 그리는 도화지 역할
### 꼬리 질문
Q1. UIBezierPath
- 경로에 대한 현상을 지정한다. 경로는 직사각형, 타원 및 호와 같은 단순한 모양을 정의하거나 직선 및 곡선 세그먼트가 혼합된 복잡한 다각형을 정의할 수 있다. 모양을 정의한 후 메서드를 사용하여 현재 context에서 경로를 그릴 수 있다.