본문 바로가기

면접질문정리

(14)
@escaping closure에 대해서 설명하시오 escaping closure에 대해서 설명해주세요 키워드: 함수를 저장하고 비동기로 실행하기위해 사용, HTTP Request 스크립트: 클로저가 함수의 인자로 전달됐을떄, 함수의 실행이 종료된 후 실행되는 클로저 입니다. 즉, Non-Escaping 클로저는 이와 반대로 함수 실행이 종료되기 전에 실행되는 클로저입니다. func runClosure(closure: () -> Void) { closure() } 기본적으로 위 클로저가 실행되는 순서를 보면 runClosure함수의 closure인자로전달되고 함수안에서 closure가 실행됩니다. 그리고 runClosure함수가 값을 반환하고 종료하죠! 기본적으로 클로저가 함수가 종료되기전에 실행되는 특징이있습니다. 반면 아래의 @escaping클로져 같..
[Architecture] Protocol Oriented Programming과 Object Oriented Programming의 차이점을 설명하시오. Protocol Oriented Programming과 Object Oriented Programming의 차이점을 설명하시오. 🔑 핵심키워드: Object, Protocol, 다형성(Polymorphosm), 상속, 채택, 참조타입, 값타입 📋 스크립트: 1️⃣ OOP(Object Oriented Programming)은 객체지향 프로그래밍입니다. OOP은 다형성을 위해 상속을 통한 overloading, overiding 사용합니다. OOP는 상속을 통해 수직적인 확장할 수 있고, subclass는 superclass를 그대로 상속받아 필요없는 프로퍼티와 메소드를 모두 물려받는다는 단점이 있습니다. 또한 상속을 활용하기 위해선 참조타입인 class를 사용해야만 하고, 다중 상속이 불가능합니다. 이러한..
[iOS] UIWindow의 역할은? # UIWindow 객체의 역할이란? (feat. window) 🔑 핵심키워드: view의 계층 구조의 최상단, 컨테이너 역할, 이벤트 전달, view콘텐츠를 제공하지않고 view를 담는 컨테이너의 역할임 📋 스크립트: 앱의 뷰 계층 구조에서 최상단에 고정되어 있으며 화면 콘텐츠에 대한 컨테이너 역할을 합니다. 뷰와 뷰컨과 함께 동작하여 화면에 표시되는 뷰계층 구조에 터치이벤트를 전달하고, 화면 방향 변경과 같은 변경사항을 관리합니다. UIWindow는 화면에 보이는 콘텐츠를 제공하지않습니다. 이는 View의 역할이구요, 이를 담는 모든 컨텐츠는 앱의 스토리보드에서 구성하는 rooViewController에서 제공합니다. UIWindow의 역할은 UIKit에서 이벤트를 수신하고, 관련된 이벤트를 root..
[Swift] 스위프트 언어의 String에서 subscript를 통해 문자에 접근할 수 없는 이유에 대해 설명해주세요. # 스위프트 언어의 String에서 subscript를 통해 문자에 접근할 수 없는 이유에 대해 설명해주세요. String은 [Int]로 접근하지 못하고String.index로 접근해야한다. 그 이유는 다음과 같다. 하나 이상의 Unicode Scalar가 모여 Character를 이루고 Character가 모여 String을 이룬다! 그런데 Character은 1개 이상의 unicode scalar로 이루어져있어 크기가 가변적이다. 어떠한 유니코드 스칼라를 기준으로 인덱싱을 지원해야하는 지가 애매하기 때문에 subscript로 접근하는 걸 제공하지 않는다. https://velog.io/@haze5959/Swift-Unicode-Scalar-그리고-문자열-count-시간-복잡도-관계 unicode Sc..
[iOS] View Life Cycle (feat. drawing cycle) 호출순서? 1️⃣ View Controller의 View의 상태변화에 따른 메서드의 호출순서를 이야기해보세요. loadView() -> viewDidLoad() -> viewWillAppear() -> viewDidAppear() -> viewWillDisappear() -> viewDidDisappear() 순서로 호출이 됩니다. # 꼬리질문 # 각각의 메서드는 어떤 역할을 가지고 있을까? loadView() controller가 관리하는 view를 만드는 역할 ex) customView를 mainView로 설정할때 이 메소드 안에서 새로운 뷰를 만들어서 뷰 컨트롤러의 메인 뷰로 설정해줘도 된다. 뷰 컨트롤러의 기본 뷰를 커스텀 뷰로 사용하고자 할 때 유용. 스토리보드를 쓰면 어차피 스토리보드에 있는 뷰를 가져와..
[Swift] Result Type이란? Result Type이란 무엇인가 ? Result 타입은 열거형 이며 두 개의 success와 failure를 리턴하는 타입입니다. 이때 Success와 Failure 부분의 제네릭타입인데 Failure 타입은 Error를 상속받은 타입이어야 합니다. Result 타입은 에러를 핸들링 하기 위하여 사용하며 실패시에는 미리 선언해둔 error 타입을 넣어주고 성공시에는 성공한 값의 타입을 넣어 주어야 합니다. result의 타입은 열거형이기 때문에 result 값을 처리 하기 위해서는 success와 failure경우를 나누어서 처리를 해줍니다. @frozen public enum Result { case success(success) case failure(Failure) } # 예상되는 꼬리질문 @Fr..
[Swift] Swift성능 개선을 위한 요소 3가지(Understanding Swift Performance, WWDC 2018 ) UnderStanding Swift Performance [목표 및 알아볼 주제들] 오늘은 성능을 사용해 디자인 공간을 좁힐 수 있또록 권한을 주는것이 목표이다. 카일: 경험상 성능영향을 고려하면 더 관용적인 솔루션을 찾는데 도움이 되는경우가 많다. 따라서 우리는 주로 성능에 중점을 두며 모델링에대해 조금 만져볼것이다. 오버헤드에 대한 멘탈모델을 심화하기위해 구조체와 클래스를 사용해 일부코드를 추적해볼것이다. 그다음 정리하기위해 배운내용을 적용하는 방법을 살펴볼 것입니다. 후반에는 프로토콜 지향프로그래밍의 성능을 평가할 것입니다. 프로토콜 및 제네릭과같은 고급 Swift의 기능의 구현을 살펴보고 모델링 및 성능 영향을 더 잘 이해해볼 것이다. 빠른면책조항: 우리는 Swift가 사용자를 대신해 컴파일하고 ..
[Swift] lazy var로 초기화했을때의 장단점? lazy로 선언하지않고 바로 초기화해주는 인스턴스가 우리같은 프로젝트에서 조금만 사용된다면 상관이 없지만 이게 1000개 이상이되면 성능과 메모리에 영향을 받는다. 그렇기 때문에 공식문서에 내용대로 가능하면 lazy로 초기화해주는게 좋다. ? [lazy의 장점] - lazy 프로퍼티와 관련된 클로저는 해당 프로퍼티를 읽을때만 실행된다. 따라서 어떤 이유로 해당 프로퍼티가 사용되지않는 경우 불필요한 할당 및 계산을 피할 수 있따. - 저장 프로퍼티값으로 lazy프로퍼티를 채울 수 있음 lazy var label: UILabel = { let label = UILabel() return label }() - self를 클로저내부에 사용할 수 있다. 이는 어떤 순환참조을 일으키 않는다. 이유는 {}()가 @n..
[ing] Closure 값 캡쳐를 사용하는 이유(ex async와 sync) 주로 고차함수나 비동기작업하는데 클로저를 많이 사용하는데 클로저를 통해 비동기 콜백을 작성할때 현재 상태를 미리획득해두지않으면 실제로 클로저의 기능을 실행하는 순간에는 변수가 nil인상태이거나 메모리에 존재하지않는 경우가 발생할 수 있다. 이때. 필요한 것이바로 클로저의 값 캡쳐기능이다. 우리가 구조체 메서드내 dispatchQueue.global().sync메서드내에서 다른 타입의 변수를 호출하면 에러가 발생하지않음 왜? main thread가 진행될동안 다른 thread에 rock이 걸리기때문에 현재 클로저내에서 값을 바꾸는 것외에는 다른스레드를 통해 바뀔일이 없다. 그런데 async를 선언하면 이와같은에러메세지가 발생한다. “Escaping closure captures mutating ‘self’..
[Swift] 메서드명을 지을때 get을 지향하라는 말은 출처가 어딜까 ? https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html#//apple_ref/doc/uid/20001282-1001751-BCIJHEDH Naming Methods Naming Methods Methods are perhaps the most common element of your programming interface, so you should take particular care in how you name them. This section discusses the following aspects of method naming: General..