본문 바로가기

EXPERIENCE/iOS

iOS/Swift 직무를 위한 면접 질문리스트(with. ARC, GCD, Dispatch Queue, 접근제어, 메모리 참조)

728x90
728x90

 

 

 

iOS 직무 면접을 대비한 질문 리스트를 작성해두신 분들이 많아서,

해당 질문에 대한 답변을 정리해보며 기본 지식을 익히고 면접을 대비해보고자 한다.........

읽고 그렇구나! 하는 것은 쉽지만... 완벽하게 이해하여 남에게 다시 설명하는 것은 너무나도 어려운 것 ㅜㅜ

 

 

 

open, public, Internal, fileprivate, private 각 접근레벨에 대해 설명하시오

더보기
  • 접근레벨
open 선언된 모듈이 아닌 다른 모듈에서도 사용 가능, 다른 모듈에서 Override 및 서브 클래싱 가능
public 선언된 모듈이 아닌 다른 모듈에서도 사용 가능
Internal 기본 접근레벨, 모듈 전체에서 사용 가능
fileprivate 특정 엔티티를 선언한 파일 안에서만 사용 가능
private 특정 엔티티가 선언된 괄호 { ... } 안에서만 사용 가능

 

strong, weak, unowned 메모리 참조 키워드에 대해 설명하시오

더보기
  • strong
    - 강한참조
    - 객체를 소유하여 레퍼런스 카운트가 증가하는 프로퍼티
    - retain과 release가 일어난다
  • weak
    - 약한참조
    - 객체를 소유하지 않고 주소값만을 가지고 있는 포인터 개념
    - 참조는 하지만 weak 메모리를 해제시킬 수 있는 권한은 다른 클래스에 있다
    - retain이 발생하지 않는다
    - 메모리가 해제될 경우 nil로 초기화 되기 때문에 항상 옵셔널 타입이어야 한다
  • unowned
    - 미소유참조
    - waek와 같이 참조는 하지만 소유하지 않고, retain count를 증가시키지 않는다
    - nil이 될 수 없으며 옵셔널 타입일 수 없다
    - 객체가 사라지게 되면 댕글링 포인터가 남는데, 이를 참고하면 crash가 나기 때문에 사라지지 않을 것이 보장되는 객체에서만 사용한다.

 

ARC에 대해서 설명하시오

더보기
  • Auto Reference Counting의 약자
  • 참조 카운트를 스스로 체크하여 메모리 관리를 해주는 도구
  • 컴파일 타임에 참조 카운트를 증가시키는 retain과 감소 시키는 release을 적절 위치에 삽입하므로써 메모리 관리를 도와주는 도구

 

DispatchQueue 에 대해 설명하시오

더보기
  • Main Thread나 Background Thread에서 순차적으로 또는 동시에 작업 실행을 관리하는 개체
  • Serial Dispatch Queue(순차처리), Concurrent Dispatch Queue(동시처리) 2가지 종류가 존재함
  • Main Dispatch Queue
    - Serial Queue이며 앱의 Main Thread이다
    - UI 관련 Task는 모두 여기서 실행되어야한다
  • Global Dispatch Queue
    - Concurrent Queue이다
    - 동시에 하나 이상의 Task를 실행함
    - Task는 큐에 추가된 순서대로 실행됨

 

GCD와 QoS에 대해서 설명하시오

더보기
  • GCD(=Dispatch)란?
    - Grand Central Dispatch의 약자
    - 멀티코어 환경에서 동시성 프로그래밍을 위해 언어 요소, 런타임 라이브러리 및 시스템 향상 기능을 포함하여 제공하는 것
    - 자동으로 일부 Dispath Oueues를 제공하지만, 특정 용도로 작성 할 수 있는 다른 큐(queue)를 제공
  • QoS란?
    - Quality of Service의 약자
    - DispatchQueue에 등록하는 작업의 우선순위
  • QoS 순위
userInterative 가장 우선순위가 높습니다. UI작업 등 사용자에게 즉각적인 반응을 해야하는 작업에 사용합니다.
userInitiated 문서를 열람하거나 인터페이스에 제스쳐를 취하는 등 사용자와의 상호작용이 시작되었을 때 곧바로 결과를 반환해야 하는 작업에 사용합니다.
default 기본값입니다. 일반적인 작업에 사용합니다.
utility 데이터를 다운로드 하는 등 결과를 만들기 위해 시간이 걸리는 작업에 사용합니다. 프로그래스 바나 액티비티 인디케이터와 함께 사용합니다.
background 사용자가 인지하지 못하는 영역에서 에너지와 리소스를 효율적으로 사용하기 위해 사용합니다.

 

Hashtable Protocol에 대해 설명하시오

더보기
  • Hashable 프로토콜을 채택하는 타입은 값을 정수인 해시값으로 표현할 수 있다
  • Swift의 기본 타입 중 string, Int, Float, Bool, 그리고 Set 콜렉션이 Hashable 프로토콜을 채택하고 있다

 

@escaping에 대해서 설명하시오

더보기
  • 함수의 인자로 전달된 클로저를 함수가 종료된 후에 실행될 수 있도록 하는 속성

 

final 키워드에 대해 설명하시오

더보기
  • final 키워드가 사용되면 재정의 및 상속이 불가능함.
  • 즉 해당 클래스, 프로퍼티, 메소드가 다른 클래스에 의해 상속되고 있지 않다는 것을 컴파일러에게 알려줌
  • 따라서 컴파일 타임에 어떤 메소드를 사용할지 바로 결정할 수 있어 직접적으로 호출되기 때문에 성능상 더 좋은 퍼포먼스를 낼 수 있음

 

Property Obsever에 대해서 설명하시오

더보기
  • 저장 프로퍼티의 값이 변화하는 것을 관찰하기 위해 사용함
  • willSet과 didSet을 사용해서 프로퍼티의 값이 변화할 때 함께 실행할 작업을 정의할 수 있음
  • willSet은 새로 변화될 값을 newValue라는 프로퍼티로 제공하고, didSet은 변화되기 전 값을 oldValue라는 프로퍼티로 제공
  • 예시
class A {
    var name: String {
        willSet {
            print("\(name) will be changed to \(newValue)")
        }
        didSet {
            print("\(oldValue) is changed to \(name)")
        }
    }
    
    init(name: String) {
        self.name = name
    }
}

let a = A(name: "A")
a.name = "B"
// A will be changed to B
// A is changed to B

 

Delegate Pattern(Delegation) 에 대하여 설명하시오

더보기
  • Delegation이란 일부 클래스의 책임을 다른 클래스의 인스턴스에게 위임 또는 전달할 수 있는 디자인 패턴
  • 특정 객체에서 일어나는 이벤트 혹은 전송할 데이터에 관한 코드를 다른 객체에서 처리(작성)하는 것
  • A객체의 일을 B객체에서 대신해주는 일을 위임하는 행위

 

 

 

 

 

추후 지속적으로 추가해보자!

 

 

 

 

 

 

 

 

 

참고사이트
 

GitHub - JeaSungLEE/iOSInterviewquestions: 👨🏻‍💻👩🏻‍💻iOS 면접에 나올 질문들 총 정리

👨🏻‍💻👩🏻‍💻iOS 면접에 나올 질문들 총 정리 . Contribute to JeaSungLEE/iOSInterviewquestions development by creating an account on GitHub.

github.com

 

 

GitHub - jeonyeohun/Getting-Ready-For-Interview: 🥷 기술면접을 준비하는 저장소: 운영체제, 네트워크, 데이

🥷 기술면접을 준비하는 저장소: 운영체제, 네트워크, 데이터베이스, 자료구조, iOS와 Swift를 다룹니다. - GitHub - jeonyeohun/Getting-Ready-For-Interview: 🥷 기술면접을 준비하는 저장소: 운영체제, 네트워

github.com

 

[iOS]면접 정리(1)

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

jiseok-zip.tistory.com

 

728x90
728x90