# 모의면접(학습활동준비) - 공유 ### 1. Singleton 디자인 패턴을 활용하는 경우를 예를 들어 설명해주세요 - 꼬리질문 : - static 키워드를 사용한 싱글턴 타입프로퍼티는 실제 어느시점에 초기화가 되는지 설명해주세요 - 여러곳에서 접근이 가능한거면 Threadsafe하지 않은 건지? ### 2 Custom View를 구현하려면 어떻게 해야하는지 설명해주세요 - key - 1. Xib 이용해서 구현 - Xib을 생성하고 또한 별도의 UIView을 상속받은 Class을 생성 > Xib에서 owner로 해당 클래스를 임명 > 커스텀 클래스 내에서 초기화 시, Xib 파일을 불러와 view로 임명하는 코드 추가를 하고 원하는 작업들을 Storyboard와 동일하게 수행 - 2. UIView을 상속해서 코드로만 구현 - UIView을 상속받는 클래스를 생성해 정말 코드로만 원하는 작업들을 설정합니다 - 꼬리질들: - 인터페이스빌더로 UI짜는거랑, 코드로만 UI를 짜는거랑 장단점 | ![](https://i.imgur.com/831oGrT.png) | | ---- | - Custom View는 언제 사용하는게 좋은가? - 재활용해야할 떄 - init(frame:) 생성자와 init(coder:) 생성자의 각 역할은 무엇일까요? - init(frame:) : 코드로 뷰를 생성할 때(위에 ViewController1 코드 참조) 생성자 - init(coder:) : Storyboard로 뷰가 생성될 때 생성자 ### 3. Core Graphics, Core Graphics의 context 대해 설명해주세요 - key - 코어그래픽은 Quartz 드로잉 엔진을 기반 2차원에서 그리는 작업 위해 사용되는 개념 - 컨텍스트는 도화지와 위치에 꽂혀있는 펜이다: 드로잉 데스티네이션을 가져오고, 가져온 드로잉 파라미터들과 기기별 정보를 가지고있기 때문이다. 컨텍스트에 그림을그리고 선 너비 채우기같은 특성을 변경할 수 있다. - 꼬리질문 - 페이지에 그려진 객체를 수정하려면 어떻게 해야하는지 아시나요? - 더 많은 오버레이로 덮어씌워야합니다 - 스토리보드를 사용해 코어 그래픽스로 2D 드로잉을 할 때 사용해보신 어노테이션 있으신가요? - @IBDesignable - 클래스에 선언해주면 빌드를 거쳐 시뮬레이터로 확인하지 않아도 실시간으로(컴파일 타임으로) 스토리보드를 통해 그리가 구현 현황을 볼 수 있도록 해주는 어노테이션 - @IBInspectable - 요소의 inspector 변경 시 바로 실시간 확인 가능하도록 선언해줄 수 있음 만약 border color 변경을 기본적으로 inspector에서 제공하지 않는다면, border color를 소스코드에서 연산 프로퍼티로 정의한다. 그리고 해당 변수에 어노테이션을 붙여 스토리보드 파일의 inspector에서 변경을 제공하게 한다. (하지만 런타임 시에만 변경 확인이 가능함, 실시간으로 확인하고 싶다면? @IBDesignable) ### 4. View Contoller의 View의 상태변화에 따른 메서드의 호출순서를 이야기해보세요 - ViewDidLoad >> ViewWillAppear >> ViewDidAppear >> ViewWillDisappear >> ViewDidDisappear - viewWillAppear와 viewDidAppear에서 무엇을 하면 좋을까요? - 그 사이에는 레이아웃, 컨스트레인트, draw메서드가불리우므로 이런 관련된 메서드라면 뷰윌어피어에서 부르는게 좋고, 뷰가 보인 후에 작동이 되야하는 게 있다면 뷰디드 어피어로 보여주는게 좋을것같다. - 다른뷰에서 다시돌아올 때, 뷰디드어피어에선 애니메이션 - UIView의 layoutSubviews 메서드는 viewWillAppear보다 먼저 호출되나요? 그렇게 생각한 이유는 무엇인가요? - 뷰윌어피어 후에 불리운다. - 꼬리질문1. 레이아웃 관련 메서드로 setNeedsLayout() 와 layoutIfNeeded() 의 차이를 아시나요? - 다음사이클에 해달라랑(비동기), 지금 당장해달라(동기)의 차이 ### 5. 스위프트 언어의 String에서 subscript를 통해 문자에 접근할 수 없는 이유에 대해 설명해주세요. - key: - String은 Character의 Collection이다(즉 `Array<Element>` 의 Element가 Character인 셈) 그러면 Array니까 Index(subscript)로 접근 해볼 수 있는 아닌가? 생각할 수 있지만, 이 Character 라는 놈은 1개 이상의 Unicode Scalar(여러개의 유니코드 결합)로 이루어져있다. 즉 크기가 **가변적**이다. - 따라서 String은 subscript를 Int가 아니라 String.Index로 접근할 수 있다 - 결론 Swift는 아스키코드가아닌, 유니코드를 따르는 언어라 그렇다! - 꼬리질문 왜가변적이아느냐? - 아스키코드랑 유니코드아시면 설명해주세요.. - 꼬리질문: 크기가 가변적이면 접근을 못하는 이유: - Array속성에 대해대답. - String에 중간글자에 접근해야하는가? - String은 첫글자랑 끝에만 접근을할수있는 swift 메서드를 사용해서 그인덱스의 다음, 이전 이렇게 접근이 가능한데 O(n)시간 복잡도를 가지므로 Array(str)로 호출해 `[Charecter]`로 만들어서 쓰는게 효율적이다.