Swift

  • Hashable이 무엇이고, 왜 Equatable을 상속해야 하는지 설명하시오.
    • Hasher로 하여금 고정된 길이의 Hash값을 가지고 이를 통해 서로 같은지 다른지 비교할 수 있어야 하는 것이다.
    • Set, Dictionary같은 자료구조에서 Hashable을 채택함으로써 Set에서는 요소가, Dict에서는 키가 유일한지 구분하고, 이 Hash로 인해 빠른 서치가 가능해 성능 향상도 가져온다.
    • Equatable을 구현해야 하는 이유는 HashableEqutable을 상속받기 때문이다.
  • mutating에 대해 설명하시오.
    • 구조체와 열거형은 값 타입이고, 값 타입의 프로퍼티는 인스턴스 메소드 안에서 수정할 수 없다. 그러나 만약 특정 메소드에서 프로퍼티를 수정할 필요가 있다면 이 키워드를 붙여야한다.
  • Instance Method와 Class Method의 차이점을 설명하시오.
    • 인스턴스 메소드는 특정 클래스, 구조체 등의 인스턴스에 속하는 함수고 클래스 메소드는 클래스 자체에 속하는 함수다.
    • 인스턴스 메소드는 인스턴스가 없으면 호출할 수 없지만, 클래스 메소드는 자체적으로 호출이 가능하다.
    • 클래스 메소드는 static 키워드를 붙이며, 클래스의 경우 class 키워드를 통해 해당 메소드를 서브 클래스가 재정의할 수 있다.
  • 프로토콜에 대해 설명하시오.
    • 기능 요구사항을 정의하는 일종의 청사진으로 실제로 이 요구사항을 구현하지 않고, 채택하는 클래스, 구조체 등이 이 구현을 담당한다.
    • 확장을 통해서 이 요구사항으 실제로 구현까지 하고 채택하는 클래스나 구조체에서는 반복적인 일은 피하면서 사용할 수 있기도 하다.
  • closure에 대해 설명하시오.
    • closure는 함수의 한 형태이자 코드 블럭이며 func 키워드로 선언하는 것이 아니라 변수에 선언하는 형태를 취하고 있다.
  • escaping에 대해 설명하시오.
    • 네트워크 요청 등 비동기 작업을 하는 경우 함수가 종료된 후에도 closure가 실행되어야 하는 경우가 있다.
    • 이처럼 함수의 정상적인 라이프 사이클을 벗어난다 하여 escaping이란 키워드를 넣는다.
  • escaping의 경우 self를 써야하는 이유에 대해 설명하시오.
    • 함수에서 탈출한 후에 closure가 어떤 객체를 참조하고 있었는지 기억하기 위해서 존재한다.
  • enum 타입에서 raw valueassociated value의 차이에 대해 설명하시오.

  • 구조체와 클래스의 차이점에 대해 설명하시오.
    • 클래스는 상속이 가능하다.
    • 클래스는 참조에 의한 전달, 구조체는 값에 의한 전달이다.
    • 즉 클래스는 그 메모리 주소를 전달하기 때문에 다른 인스턴스의 변화도 영향을 준다.
    • 반대로 구조체는 그저 복사이기 때문에 다른 인스턴스의 변화에 영향을 주지 않는다.
  • 제네릭은 무엇이며 어떤 문제를 해결할 수 있는지 설명하시오.
    • 재사용이 가능하고 유연한 코드를 작성할 수 있는 타입이다.
    • 제네릭으로 정의된 타입은 서로 같기만 하다면 어떤 타입이 들어와도 상관없다.
    • 제네릭에 Equatable과 같은 프로토콜을 채택하면 이 프로토콜을 준수하기만 하면 어떤 타입이 들어와도 상관이 없다.
  • strong, weakunowned의 차이점에 대해 설명하시오.
    • strongweak이나 unowned로 명시되지 않은 경우이며 객체가 할당되는 순간 레퍼런스 카운트를 증가시키고, 이로 인해 메모리 해제를 피하여 객체를 안전하게 사용하고자 할때 쓰인다.
    • weakunowned는 모두 순환 참조를 끊는 방법중 하나인데, weak의 경우 해당 객체가 옵셔널일 수 있고, 반대로 unowned의 경우 해당 객체가 반드시 nil이 아니라는 전제하에 사용하기 때문에 만약 unowned를 사용하는 경우 해당 객체가 nil인 경우 크래시가 발생한다.

iOS

  • Cocoa Touch Framework에 대해 설명하시오.
    • Cocoa Touch Framework는 iOS 애플리케이션 개발 환경으로 여러 프레임워크를 포함하는 최상위 레벨의 프레임워크다. (참고로 Cocoa Framework는 macOS를 위한 프레임워크)
    • Cocoa Touch FrameworkFoundationUIKit이라는 핵심 프레임워크를 포함한다. (CoreAnimation, MapKit, CoreData…)
  • UIKit이란?
    • iOS 애플리케이션의 사용자 인터페이스를 구현하고, 이벤트를 관리하는 프레임워크다.
    • 대표적으로 제스처, 애니메이션, 이미지 처리, 테이블뷰 등의 화면과 이벤트를 구성하는 요소를 포함한다.
    • UIViewController는 UIKit 프레임워크에 정의되어 있으며, 이 클래스가 사용자의 이벤트와 인터페이스를 담당하기 때문에 UIKit 임포트가 필요하다.
  • Foundation이란?
    • UIKit에도 이미 파운데이션이 간접적으로 추가된다.
    • 네트워크나 파일 관리, 원시 데이터 타입 사용 등 기본적인 기능을 담당하는 핵심 프레임워크다.
  • ARC(Auto Reference Counting)에 대해 설명하시오.
    • 코드를 빌드(컴파일) 할 때 특정 객체의 레퍼런스 카운트를 추적해 0이 되는 순간 자동으로 해당 객체의 할당을 해제한다.
    • Garbage Collection은 프로그램이 실행되는 동안에도 사용하지 않는 객체를 자동으로 추적하여 메모리를 해제하지만 ARC는 프로그램이 실행되는 동안에 자동으로 메모리를 관리하지 않는다. 그러므로 Strong을 통한 잘못된 객체 사용은 데드락 혹은 메모리 릭을 유발할 수 있다.
  • iOS 앱의 메모리 누수를 확인할 수 있는 방법에 대해 설명하시오.
    • 일단 간편하게는 Xcode의 디버그 탭에서 확인할 수 있고, Instruments의 Leaks를 통해 자세히 볼 수 있다.
  • iOS 앱의 생명주기에 대해 설명하시오.
    • Not running -> Inactive(Foreground <-> Background) -> Active(Foreground) -> Background <-> Suspended -> Not running
  • 순환참조가 왜 발생하며 이를 해결할 수 있는 방법에 대해 설명하시오. 클로져의 본문이 인스턴스를 캡쳐(컨텍스트를 저장)하는 경우 self를 캡쳐하게 되면 클로저는 self를 계속 잡고 있고, self는 클로저가 해제되길 기다리고 서로 계속 기다리는 상황이 발생해서 순환참조가 발생되며 이는 weak self 혹은 unowned self로 해결할 수 있다.

  • MVC 아키텍쳐에 대해 설명하시오.
    • Model, View, Controller로 책임소지를 분할한 아키텍쳐.
  • MVVM 아키텍쳐에 대해 설명하시오.
    • Model, View, ViewModel로 책임소지를 분할한 아키텍쳐이고 ViewController도 View에 소속되어 좀더 껍데기화 되고 비즈니스 로직은 ViewModel에서 처리함으로써 ViewController를 가볍게 만든 아키텍쳐.
  • Frame과 Bounds의 차이에 대해 설명하시오.
    • Bounds는 자기 자신이 차지하는 고유한 영역이며 Frame은 슈퍼부와 관련해서 내가 차지하는 영역이라, 예를 들어 정사각형의 뷰를 경사도 있게 돌리게 되면 Bounds는 그대로이나 Frame은 변하게 된다.
  • AutoLayout Constrait Priority에 대해 설명하시오.
    • Constraint 부여시 필수(1000), 높음(750), 중간(500), 낮음(250)순으로 우선순위를 두어서 충돌이 나는 경우에 우선순위 높은 것을 적용시키기 위해 존재한다.
  • AutoLayout Content Hugging Priority에 대해 설명하시오.
    • Content hugging은 스스로를 감싸안아서 더 커지기를 거부한다고 이해하면 쉽다. 이 값이 높으면 높이나 폭이 커지는 것을 우선적으로 저항하게 된다.
  • Content Compression Resistance Priory에 대해 설명하시오.
    • Hugging과 반대로 이 값이 클수록 외부에 압력에 대한 저항이 커서 작아지기를 거부한다고 이해하면 쉽다. 이 값이 높으면 다른 아이템들이 최대한 축소된 후 영향을 받게 된다. 즉 다른 애들을 먼저 찌그러트린다.

프로그래밍

  • 오버로딩과 오버라이딩의 차이에 대해 설명하시오.
    • 오버로딩이란 같은 이름의 메서드를 여러개 가지면서 매개변수의 갯수나 타입을 다르게 하는 기술이다.
    • 오버라이딩이란 상위 클래스가 가진 것을 서브 클래스가 재정의하여 사용하는 기술이다.
  • 고차함수가 무엇인지 설명하시오.
    • 고차 함수란 다른 함수를 전달 인자로 받거나 함수의 실행 결과로 함수를 반환하는 함수를 뜻한다.
    • Swift에서는 대표적으로 map, filter, reduce 등이 있다.
  • 객체지향 프로그래밍에 대해 설명하시오. 프로그래밍에 필요한 데이터들을 추상화시켜 객체를 만들고 이들 객체간의 상호작용을 통해서 프로그램을 만들어가는 방식이다.
    • 캡슐화(은닉), 상속, 다형성, 추상화
  • 반응형 프로그래밍에 대해 설명하시오.
    • 덧셈을 예로 들어…혹은 엑셀시트를 예로들어…
  • 함수형 프로그래밍에 대해 설명하시오.
    • 사이드이펙트를 줄여 불변성을 최소화하는 프로그래밍 기법.