[iOS]면접 정리(1)
첫 면접으로 포트폴리오 기준으로 준비를 했지만, 생각 정리가 안되서 만족스러운 대답을 못했던 것 같다 🥲
그래도 부족한 부분을 알 수 있던 좋은 계기라 생각하며, 나름 열심히 정리해보려고 합니다 😁

기술 면접 관련 질문들 📑

final 에 대하여 ▾

사용의 의미

  • 재정의상속을 방지합니다.
  • 코드의 런타임 성능이 향상됩니다. (= 런타임 오버 헤드가 제거되고 정적 디스패치가 구현됩니다 )

코드의 런타임 성능이 향상된다 ❓

  • 런타임에 컴파일러 계산을 피하면 프로그램이 효율적이고 빨라집니다.
  • 시스템 관점에서는 클래스 멤버가 참조 될 때마다 런타임에 다음 계산을 수행해야합니다.
    1. 클래스가 코드의 어느 곳에서나 상속되었는지 or 그 자체가 하위 클래스인지 확인합니다.
    2. 클래스 멤버가 재정의되었는지와 횟수를 확인합니다.
    3. 여러 재정의에서 올바른 구현을 가져옵니다.
    4. 구현 풀에서 올바른 구현을 간접적으로 호출합니다.
  • final은 시스템에 "다른 유사한 엔티티가 없다" 라고 알려줍니다. 이러면 시스템의 계산은 당연히 걱정할 필요가 없게 되며, 이는 컴파일 시간에 발생하게 되는데, 이는 런타임 오버 헤드를 제거합니다. → 직접 액세스 || 정적 디스패치 라고 합니다.
  • 이로써 런타임 효율성을 증가시킨다고 합니다.

ARC 에 대하여 ▾

ARC(Auto Reference Counting) ❓

  • iOS는 앱의 메모리 사용을 추적 및 관리하기 위해 ARC 기능을 사용합니다.
  • 참조 메모리 관리를 자동으로 해주는 기능을 뜻합니다.
  • 이는 인스턴스가 참조되거나 참조해제될 때 횟수를 카운팅하고, 횟수가 0이 되면 인스턴스를 메모리에서 해제하는 방식으로 수행됩니다.

더 구체적인 기능 

  • 클래스가 새로운 인스턴스를 생성할 때, ARC는 인스턴스에 대한 정보를 저장할 메모리 청크를 할당합니다.
  • 할당한 메모리 청크에는 인스턴스 타입에 대한 정보, 인스턴스와 관련된 프로퍼티 값 등을 저장합니다.
  • 더이상 인스턴스가 필요하지 않게 되면 자동으로 메모리에서 비우는 방식으로 메모리를 관라합니다.
  • But! ARC가 사용중인데 인스턴스를 해제하면 인스턴스의 프로퍼티나 메소드에 접근할 수 없는데, 이 때 접근하면 앱에서 Crash가 납니다.
  • 따라서 인스턴스를 필요로 하는 동안에는 메모리에서 사라지지 않게 하기 위해, 인스턴스 할당 시 strong reference를 연결하고 ARC가 인스턴스의 참조 횟수를 추적합니다.
구체적인 예시 중 weak & unowned 참조 관련한 내용도 포함되어 있어 따로 정리해보려고 합니다.

Delegate Pattern(Delegation) 에 대하여 ▾

정의

  • 애플 공식 문서에 따르면 "Delegation이란 일부 클래스의 책임을 다른 클래스의 인스턴스에게 위임 또는 전달할 수 있는 디자인 패턴을 의미한다.라고 합니다.
  • 쉽게 말해 어떤 객체에서 일어나는 이벤트 혹은 전송할 데이터에 관한 코드를 다른 객체에서 작성해주는 것을 말합니다.
  • A객체의 일을 B객체에서 대신해주는 일을 위임하는 행위입니다.
  • protocol (해야할 일의 목록)  &&  sender (일을 시키는 객체)  &&  receiver (일을 하는 객체)

Process 

1. 요구사항을 파악합니다.

  • 각각의 Delegate들은 Delegate Protocol에 의해 나열된 그들의 규칙이 있습니다. 이들은 함수 시그니쳐들의 집합으로 해당 protocol을 따르게 된다면 반드시 구현해야하는 함수들입니다.
protocol UITableViewDataSource {
   func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
   func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
}

 

2. Delegation을 따른다/채택한다.

  • 클래스 뒤에 SomeDelegate를 작성하여 해당 클래스가 SomeDelegate protocol을 따른다는 것을 표현할 수 있습니다.
class SomeViewController: UIViewContoller, UITableViewDataSource {
	/// - method
}

 

3. Delegate 객체(일을 시키는 객체, sender) 와 연결을 합니다.

/// TableView (선언했다고 가정)
tableView.dataSource = self

 

4. 요구사항들 구현하기 (대신 구현하기)

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
	return 3
}

API 에 대하여 ▾

정의

  • Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스 ▾ [ 위키 백과 ]
  • 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 능을 제어할 수 있게 만든 인터페이스를 뜻합니다.

장 / 단점

  • 장점 🏅
    • 비즈니스적 관점에서는 새로운 수익 채널 확보 및 기존 수익 채널 확장할 수 있습니다.
    • 비용 및 시간을 줄일 수 있습니다.
  • 단점 💣
    • 정보 부족 및 정확성이 낮을 수 있고, 확장성이 낮을 수도 있습니다.
    • API 손상, 노출, 해킹시 데이터 유출 사고의 원이 되므로 API 보안이 중요합니다.

RESTful API 에 대하여 ▾

REST 정의

  • REST(Representational State Transfer)
    • 자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미합니다.
    • HTTP URL(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대하여 CRUD Operation을 적용하는 것을 의미합니다.

REST API 정의 && 특징

  • 정의
    • REST 기반으로 서비스 API를 구현한 것입니다.
  • 특징
    • 사내 시스템들도 REST 기반으로 시스템을 분산해 확장성과 재사용성을 높여 유지보수 및 운용을 편리하게 할 수 있습니다.
    • REST는 HTTP 표준을 기반으로 구현하므로, HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구현할 수 있습니다.
    • REST API 제작하면 델파이 클라이언트 뿐 아니라 자바, C#, 웹 등을 이용해 클라이언트를 제작할 수 있습니다.

RESTful 정의 && 목적 

  • 정의
    • 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어입니다.
    • RESTful은 REST를 REST답게 쓰기 위한 방법으로, 누군가가 공식적으로 발표한 것은 아닙니다.
    • REST 원리를 따르는 시스템은 RESTful 이란 용어로 지칭됩니다.
  • 목적
    • 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것입니다.
    • RESTful한 API를 구현하는 근본적인 목적이 성능 향상에 있는 것이 아니라 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것이 주 동기입니다. 
성능이 중요한 상황에서는 굳이 RESTful한 API를 구현할 필요는 없습니다. 😁

REST의 장 / 단점

  • 장점 🏅
    • HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구축할 필요가 없습니다.
    • HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해줍니다.
    • HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능합니다.
    • Hypermedai API의 기본을 충실히 지키면서 범용성을 보장합니다.
    • REST API 메세지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있습니다.
    • 여러가지 서비스 디자인에서 생길 수 있는 문제를 최소화합니다.
    • 서버와 클라이언트의 역할을 명확하게 분리합니다.
  • 단점 💣
    • 표준이 존재하지 않습니다.
    • 사용할 수 있는 메소드가 4가지 밖에 없습니다. ( HTTP Method 형태가 제한적입니다. )
    • 브라우저를 통해 테스트할 일이 많은 서비스라면 쉽게 고칠수 있는 URL보다 Header 값이 더 어렵게 느껴집니다.
    • 구형 브라우저가 아직 제대로 지원해주지 못하는 부분이 존재합니다. ▾
    • PUT, DELETE를 사용하지 못하는 점 & pushState를 지원하지 않는 점

DispatchQueue 에 대하여 ▾

Queue 에 대해서 

  • 정의
    • Queue는 컴퓨터의 기본적인 자료 구조의 한가지로, 선입선출(FIFO, First In First Out)구조로 저장하는 형식 [ 위키백과 ]
  • 종류
    • Serial
      • 하나의 작업이 끝나야만 다음 작업을(한번에 하나의 작업만) 실행하는 Queue
    • Concurrent
      • 동시에 여러 작업들을 실행하는 Queue

 

DispatchQueue(GCD) 에 대해서

  • 정의
    • 앱의 메인 쓰레드나 백그라운드 쓰레드에서 순차적으로 또는 동시에 작업 실행을 관리하는 개체 [Apple Developer]
    • 앱에서 Task를 비동기적으로 동시에 수행 할 수 있는 손쉬운 방법입니다.
  • GCD
    • 자동으로 일부 dispath queues를 제공하지만, 특정 용도로 작성 할 수 있는 다른 큐(queue)를 제공합니다.
  • Serial, Concurrent Queue는 Dispatch Queue에 들어갈 수 있습니다. ▾
    • Serial Dispatch Queue → Task들을 넣으면 하나의 Task가 끝나고 다음 Task를 실행합니다.
    • Concurrent Dispatch Queue → Task들을 넣으면 앞의 Task 완료 여부와 상관 없이 동시에 Task를 실행합니다.
  • 종류
    • main dispatch queue
      • 앱의 main 쓰레드에서 Task를 실행하는(전역적으로 사용 가능한) serial queue
      • 앱의 주요 동기화 지점으로 사용됩니다.
      • UI와 관련된 Task를 넣어야 합니다.
    • global dispatch queue
      • 동시에 하나 이상의 Task를 실행하지만 Task는 큐에 추가된 순서대로 계속 시작됩니다. (Concurrent queue)
      • 현재 실행중인 Task는 dispatch queue에서 관리하는 고유한 쓰레드에서 실행됩니다.
Dispatch Queue 관련 자료는 여기서 참고하였습니다. 추가적인 자료 또한 이 사이트에서 확인하실 수 있습니다.

 

'iOS_Swift.zip' 카테고리의 다른 글

[iOS]SDWebImage 에러  (0) 2022.02.11
[iOS]카카오 로그인(소셜)  (0) 2022.01.25
[iOS]CollectionView Layout  (0) 2022.01.11
[iOS]HIG(Human Interface Guide)  (0) 2022.01.10
[iOS]SOLID 원칙  (0) 2022.01.07