본문 바로가기
#모바일 [Mobile]/iOS

[iOS] iOS/macOS 개발자 면접 예상 질문 (Interview Question)

by cy_mos 2019. 8. 3.
반응형
ㅍ카테고리 게시글 작성 날짜 게시글 최근 수정 날짜 작성자
iOS 2019-08-03 22:00 2022.05.23. 20:50 Dev.Yang

 

  • 👓 Cocoa Framework란 무엇인지 설명하시오.

01234
https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/OSX_Technology_Overview/About/About.html#//apple_ref/doc/uid/TP40001067-CH204-TPXREF101

 

🍎 Cocoa (Application) Layer - The Cocoa (Application) layer implements many features that are distinctive aspects of the OS X user experience. Users expect to find these features throughout the system, so it’s a good idea to support all the features that make sense in your app.

 

🍎 Media Layer - OS X supports more than 100 media types, covering a range of audio, video, image, and streaming formats. Table 3-1 lists some of the more common supported file formats.

 

🍎 Core Services - The technologies in the Core Services layer are called core services because they provide essential services to apps but have no direct bearing on the app’s user interface.

 

🍎 Core OS The technologies and frameworks in the Core OS layer provide low-level services related to hardware and networks. These services are based on facilities in the Kernel and Device Drivers layer.

 

🍎 Kernel and Device Drivers - The lowest layer of OS X includes the kernel, drivers, and BSD portions of the system and is based primarily on open source technologies. OS X extends this low-level environment with several core infrastructure technologies that make it easier for you to develop software.


  • 👓 Cocoa Touch Framework란 무엇인지 설명하시오.

https://www.edwith.org/boostcourse-ios/lecture/17994/

 

  • 코코아 터치 프레임워크 (Cocoa Touch Framework)는 Foundation과 UIKit을 포함하며 iOS 환경의 응용 프로그램을 개발 시 사용하는 API입니다.

  • 👓 ARC (Auto Reference Couting)란 무엇인지 설명하시오.

Automatic Reference Counting (ARC) is a memory management feature of the Clang compiler providing automatic reference counting for the Objective-C and Swift programming languages. At compile time, it inserts into the object code messages retainand release which increase and decrease the reference count at run time, marking for deallocation those objects when the number of references to them reaches zero.

 

ARC differs from tracing garbage collection in that there is no background process that deallocates the objects asynchronously at runtime. Unlike tracing garbage collection, ARC does not handle reference cycles automatically. This means that as long as there are "strong" references to an object, it will not be deallocated. Strong cross-references can accordingly create deadlocks and memory leaks. It is up to the developer to break cycles by using weak references.

 

Apple Inc. deploys ARC in their operating systems, such as macOS (OS X) and iOS. Limited support (ARCLite) has been available since Mac OS X Snow Leopard and iOS 4, with complete support following in Mac OS X Lion and iOS 5. Garbage collection was declared deprecated in OS X Mountain Lion, in favor of ARC, and removed from the Objective-C runtime library in macOS Sierra.

 

 Automatic Reference Counting (ARC)는 Objective-C와 Swift 프로그래밍 언어에 대해서 자동 참조 계산 기능을 제공하는 Clang 컴파일러의 메모리 관리 기능입니다. 컴파일 시, 런타임에 참조 횟수를 늘리거나 감소시키는 객체 코드 메시지를 삽입합니다. 또한, 참조 횟수가 0이 되면 해당 객체의 할당을 해제합니다.

Automatic Reference Counting (ARC)는 런타임에 객체를 비동기적으로 할당하여 해제하는 백그라운드 프로세스가 없다는 점에서 Garbage Collection과 다릅니다. Garbage Collection은 프로그램이 실행되는 동안에도 사용하지 않는 객체를 자동으로 추적하여 메모리를 해제하지만, Automatic Reference Counting (ARC)는 프로그램이 실행되는 동안에 자동으로 Reference Counting을 하여 메모리를 관리하지 않습니다. 그러므로 Strong을 통한 잘못된 객체 사용은 교착 상태 (Dead Lock) 및 메모리 누수 (Memory Leak)을 일으킬 수 있습니다. 이는 Weak을 통한 약한 연결 참조를 통하여 개발자가 메모리 사이클이 발생하지 않도록 개발을 진행하여야 합니다.

Apple Inc. 는 macOS (OS X) 및 iOS와 같은 운영 체제에 ARC를 배포합니다. Mac OS X Snow Leopard와 iOS 4 이후부터 사용 가능하지만 한정된 기능만을 사용할 수 있었으며, Mac OS X Lion과 iOS 5에서부터는 완벽하게 지원되었습니다. OS X Mountain Lion에서는 Garbage Collection이 Automatic Reference Counting (ARC)를 위해 더 이상 사용되지 않으며 macOS Sierra의 Objective-C 런타임 라이브러리에서 제거되었습니다.


🛠 [SwiftUI] Alert와 ActionSheet의 차이점

  • SwiftUI에서 Alert은 최대 2개로 제한 된 수의 버튼만을 사용해야하고 아무런 버튼을 생성하지 않더라도 기본적인 버튼이 자동으로 생성이됩니다. 그에반해 ActionSheet는 배열 형태로 버튼을 입력받아 개발자가 원하는 수 만큼의 버튼을 생성할 수 있습니다.
  • Alert은 모든 플랫폼 (tvOS, macOS, iOS, watchOS, iPadOS)에서 사용할 수 있지만, ActionSheet는 iOS나 watchOS와 같이 작은 화면을 가진 디바이스 운영체제에서만 사용할 수 있습니다. 

🛠 [Swift] 객체지향 프로그래밍 (OOP) 특징을 간략하게 설명하시오.

  • 추상화 (Abstrution) 인터페이스 (Interface)로 클래스 (Class)들의 공통적인 특성들을 하나로 묶어 표현하는 특징입니다.
  • 캡슐화 (Encapsulation) 관련 된 데이터와 그 데이터를 처리하는 함수들을 그룹화하는 특징입니다.
  • 정보은닉 (Information Hiding) 다른 객체에게 자신의 정보를 숨기며 자신의 연산만을 통해서 접근을 허용하는 특징입니다.
  • 상속 (Inheritance) → 상속은 기존 클래스를 수정하지 않으면서 이미 정의되어 있는 내용을 확장하여 사용할 수 있는 방법을 제공하는 특징입니다.
  • 다형성 (Polymorphism) 메세지에 의해 객체 (Object)가 연산을 수행하게 될 때, 하나의 메세지에 대하여 각 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 특징입니다.

🛠 [Swift] Hashable이 무엇이고, Equatable을 왜 상속해야 하는지 설명하시오.

Hashable이란 Set, Dictionary 등의 Collection 구조에서 임의의 자료형을 정수의 값으로 변환하여 Key 값을 통하여 각각의 인스턴스를 접근할 수 있도록 해준다. 또한, Hashable은 Equatable의 프로토콜을 준수하여야 하는데 이는 Hashable을 통해서 변환된 정수의 값을 바탕으로 인스턴스를 비교하여 찾아야 하기 때문이다.

 

  • Hashable A type that can be hashed into a Hasher to produce an integer hash value.
  • Equatable → A type that can be compared for value equality.
  • 해쉬 함수 (Hash Function) → A hash function is any function that can be used to map data of arbitrary size onto data of a fixed size.

🛠 [Swift] mutating 키워드에 대해 설명하시오.

mutating은 Swift에서 값 복사(Pass by value) 형태의 Struct에서 멤버 변수의 값을 변경하고자 할 때 함수를 통해서 멤버 변수의 값을 변경할 수 있도록 하는 키워드이다.

 

mutating 관련 된 예제 소스코드는 아래와 같습니다.

struct Point {
    var x = 0.0, y = 0.0
    mutating func moveBy(x deltaX: Double, y deltaY: Double) {
        x += deltaX
        y += deltaY
    }
}

var somePoint = Point(x: 1.0, y: 1.0)
somePoint.moveBy(x: 2.0, y: 3.0)
print("The point is now at (\(somePoint.x), \(somePoint.y))")
// Prints "The point is now at (3.0, 4.0)"

🛠 [Swift] 인스턴스 메소드 (Instance Method)와 클래스 메소드 (Class Method)의 차이점을 설명하시오.

인스턴스 메소드 (Instance Method)클래스 (Class), 구조체 (Struct) 또는 Enum 인스턴스에 속한 함수를 말한다. Instance Method를 사용하기 위해서는 인스턴스화를 통하여 인스턴스를 만들어 해당 인스턴스를 통하여 함수를 호출할 수 있다. 하지만 클래스 메소드 (Class Method)는 이러한 인스턴스화를 하지 않고 Method를 직접 호출할 수 있다.

 

인스턴스 메소드 (Instance Method)와 클래스 메소드 (Class Method) 관련 예제 소스는 아래와 같습니다.

 

import Foundation

/* Instance Method */
class Counter {
    var count = 0
    func increment() { count += 1 }
    func increment(by amount: Int) { count += amount }
    func reset() { count = 0 }
}

let counter = Counter()
// the initial counter value is 0
counter.increment()
// the counter's value is now 1
counter.increment(by: 5)
// the counter's value is now 6
counter.reset()
// the counter's value is now 0

/* Class method */
class Person {
    class func printf() { print("Person Class Method") }
}

Person.printf()

  • 👓 고차 함수(Higher-Order Function)가 무엇인지 설명하시오.

고차 함수(Higher-order function)는 ‘다른 함수를 전달 인자로 받거나 함수 실행의 결과를 함수로 반환하는 함수’를 뜻합니다. 스위프트의 함수는 일급 시민이기 때문에 함수의 전달 인자로 함수를 전달할 수 있으며, 함수를 결괏값으로 반환할 수 있습니다. 또한, Swift의 대표적인 고차 함수로는 filter, reduce, map이 있습니다.

 

📓 일급 시민

ⓐ 변수(Variable)에 저장할 수 있다. ⓑ 인자 (Paremeter)로 전달할 수 있다. ⓒ 반환 값 (Return Value)으로 전달할 수 있다. 의 조건을 만족하여야 한다.

 

📓 일급 객체

프로그래밍 언어에서 객체(Object)를 일급 시민으로 취급한다.

 

📓 일급 함수

프로그래밍 언어에서 함수(Function)를 일급 시민으로 취급한다. 하지만, ⓓ 런타임(Runtime) 생성이 가능하다. ⓔ 익명 (Anonymous)으로 생성이 가능하다. 의 추가적인 조건을 만족하여야 한다.


  • 👓 프로토콜(Protocol)이란 무엇인지 설명하시오.

프로토콜(Protocol)이란 함수(Function)와 변수(Variable)를 제공해야 한다는 일종의 약속이다.

 

A protocol defines a blueprint of methods, properties, and other requirements that suit a particular task or piece of functionality. The protocol can then be adopted by a class, structure, or enumeration to provide an actual implementation of those requirements. Any type that satisfies the requirements of a protocol is said to conform to that protocol.

protocol AnotherProtocol {
    static var someTypeProperty: Int { get set }
}

protocol FullyNamed {
    var fullName: String { get }
}

protocol RandomNumberGenerator {
    func random() -> Double
}

🛠 [Swift] 클로저 (Closure)이란 무엇인지 설명하시오.

  • 클로저란 일종의 코드 블록이자, 일급 객체로 완벽한 역할을 할 수 있습니다. 일급 객체란 전달 인자로 보낼 수 있고, 변수/상수 등으로 저장하거나 전달할 수 있으며, 함수의 반환 값이 될 수도 있습니다. 실제 우리가 알고 있는 함수는 클로저의 한 형태로, 이름이 있는 클로저입니다.
  • 클로저는 일정 기능을 하는 코드를 하나의 블록으로 모아놓은 것으로, 클로저는 변수나 상수가 선언된 위치에서 참조를 획득하고 저장할 수 있습니다. 또한 클로저는 아래와 같이 세가지의 형태가 존재합니다.
    1. 이름이 있으면서 어떤 값도 획득하지 않는 전역함수의 형태
    2. 이름이 있으면서 다른 함수 내부의 값을 획득할 수 있는 중첩된 함수의 형태
    3. 이름이 없고 주변 문맥에 따라 값을 획득할 수 있는 축약 문법으로 작성한 형태

 

아래의 소스코드는 클로저의 기본형태 및 후행 클로저 예제입니다.

 

{ (parameters) -> return type in
    statements
}

/* 후행 클로저(Trailing Closure) 사용 */
let reversed: [String] = names.sorted { (left: String, right: String) -> Bool in
  return left > right
}

⌘ 옵셔널 체이닝 (Optional Chaining)

  • 옵셔널 (Optional)에 속해 있는 nil 일지도 모르는 프로퍼티, 메서드, 서브스크립션 등을 가져오거나 호출할 때 사용할 수 있는 일련의 과정입니다. 옵셔널에 값이 있다면 프로퍼티, 메서드, 서브스크립트 등을 호출할 수 있고, 옵셔널이 nil 이라면 프로퍼티, 메서드, 서브스크립트 등은 nil을 반환합니다. 즉, 중첩된 옵셔널 중 하나라도 값이 존재하지 않는다면 결과적으로 nil을 반환합니다.
  • Optional chaining is a process for querying and calling properties, methods, and subscripts on an optional that might currently be nil. If the optional contains a value, the property, method, or subscript call succeeds; if the optional is nil, the property, method, or subscript call returns nil. Multiple queries can be chained together, and the entire chain fails gracefully if any link in the chain is nil.

아래의 소스코드는 옵셔널 체이닝 (Optional Chaining) 예제입니다.

 

if let roomCount = john.residence?.numberOfRooms {
    print("John's residence has \(roomCount) room(s).")
} else {
    print("Unable to retrieve the number of rooms.")
}
// Prints "John's residence has 1 room(s)."

🛠 [OSX] 전체 디스크 접근 권한 (Full Disk Access)이란 무엇인지 설명하시오.

전체 디스크 접근 권한 (Full Disk Access)

 

전체 디스크 접근 권한은 macOS Mojave (macOS 10.14) 버전에서부터 나온 새로운 보안 기능입니다. 사용자의 파일들을 보호하기 위해서 애플리케이션이 임의로 사용자의 동의 없이 사용자의 파일에 대한 접근을 제한하고 있습니다. 사용자 파일에 접근하기 위해서는 반드시 전체 디스크 접근 권한을 통해서 접근 권한을 얻어야 합니다. macOS Mojave 이전 버전에서는 모든 애플리케이션은 설치 시 자동적으로 사용자 파일에 대한 권한이 주어졌습니다. 특히 이러한 전체 디스크 접근 권한은 macOS 시스템에서 사용자 파일을 수집하는 프로그램 또는 Malware 탐지 기능을 수행하는 Anti Virus 프로그램에게 필수적인 기능입니다.

 

더욱 세부적인 정보는 [OS - 🍎 macOS] 전체 디스크 접근 권한 (Full Disk Access) 게시물을  확인해주세요.


🛠 [OSX] macOS AppKit (Application Kit) Framework와 Cocoa에 대하여 설명하시오.

  • AppKit (Application Kit)  인터랙티브 그래픽 애플리케이션을 개발하는데 쓰이는 방대한 양의 클래스와 메서드 모음이며, 해당 프레임워크를 사용하여 텍스트, 메뉴, 툴 바, 표, 문서, 페이스트보드 (Pasteboard) 등을 쉽게 다룰 수 있도록 기능을 제공하는 프레임워크입니다.
  • Cocoa  macOS 운영체제에서 Foundation Framework, Application Framework, CoreData Framework를 통징하는 용어입니다.

🛠 [OSX] 번들 (Bundle)이란 무엇인지 설명하시오.

번들 (Bundle)은 정의된 구조와 파일 확장자를 가지는 디렉터리 (Directory)의 일종으로 macOS, iOS, tvOS, watchOS 등의 운영체제 환경에서 손쉽게 소프트웨어를 전달하기 위해 만들어졌습니다.

 

  • 번들 (Bundle) 확장자는 .app, .framework, .kext, .plugin, .docset, .xpc, .qlgenerator, .component, .saver, .mdimporter 등의 확장자가 있습니다.
  • 번들 (Bundle) 내부에 세부적인 구조는 애플리케이션 번들 (Application Bundles), 프레임워크 번들 (Framework Bundles), Loadable Bundles, Localized Resources 등의 구조로 이루어져있습니다.

 

더욱 세부적인 정보는 [OS - 🍎 macOS] 번들 (Bundle) 게시물을  확인해주세요.


🛠 [OSX] 게이트 키퍼 (GateKeeper)이란 무엇인지 설명하시오.

https://en.wikipedia.org/wiki/Gatekeeper_(macOS)

 

게이트 키퍼 (Gate Keeper)는 윈도의 사용자 계정 컨트롤(UAC)과 유사한 기능으로, 인터넷을 통해 다운로드한 앱이나 써드 파티(Third-party) 앱들로부터 맥(Mac)을 보호하는 기능이다.


🛠 [Swift] KVC (Key-Value Coding)와 KVO (Key-Value Observing)을 설명하시오.

  • KVC (Key-Value Coding) → 객체에 대한 프로퍼티 (Property)들을 Key 또는 KeyPath를 통하여 간접적으로 값을 가져오는 방법입니다.  
  • KVO (Key-Value Observing) → 객체에 대한 프로퍼티 (Property)의 변경에 관하여 다른 객체에게 알림을 주는 코코아 프로그래밍 패턴입니다. NSObject를 상속하는 Class 객체에 대해서만 사용할 수 있습니다. 

더욱 세부적인 정보는 [iOS] KVC (Key-Value Coding) 또는 [iOS] KVO (Key-Value Observing 게시물을 통하여 확인할 수 있습니다.


🛠 [Swift] Foundation Framework에 대하여 설명하시오.

숫자나 스트링 같은 기본 객체, 객체의 컬렉션인 Array, Dicationary, Set 등을 개발자가 사용할 수 있도록 제공합니다. 또한, 날짜와 시간을 다루거나, 자동 메모리 관리 기능과 하부 파일 시스템을 사용하고, 객체를 저장하며, 사각형 같은 기하학 데이터 구조를 다룰 수 있도록 제공하는 프레임워크입니다.


🛠 [iOS] AutoLayout intrinsicContentSize 설명하시오.

https://magi82.github.io/ios-intrinsicContentSize/

 

UIKit에서 사용이 되는 대부분들의 View들은 기본적인 컨텐츠 크기의 고유이 Size를 가지고 있습니다. 이를 확인할 수 있는 예로 UILabel, UIButton, UISwitch 등을 사용하여 Auto Layout으로 작업을 할 때 제약사항으로 Width와 Height를 추가하지 않아도 오류가 나지 않는 이유는 intrinsicContentSize를 가지고 있어 이를 통하여 intrinsicContentSize 프로퍼티에서 컨텐츠의 크기를 계산하기 때문입니다.


🛠 [iOS] Frame과 Bounds 차이점을 설명하시오.

https://gist.github.com/JeOam/c953d2d9de3c17f9f905

 

  • Frame 상위뷰 (SuperView)의 좌표 시스템을 기준으로 UIView의 위치와 크기를 나타냅니다.
  • Bounds 자기 자신의 좌표 시스템을 기준으로 위치와 크기를 나타냅니다.
  • Cetner → 상위뷰 (SuperView)의 좌표 시스템을 기준으로 UIView의 중심 좌표 값을 나타냅니다.

 

The Relationship of the Frame, Bounds, and Center Properties of UIView.

* The frame property contains the frame rectangle, which specifies the size and location of the view in its superview’s coordinate system.

* The bounds property contains the bounds rectangle, which specifies the size of the view (and its content origin) in the view’s own local coordinate system.

* The center property contains the known center point of the view in the superview’s coordinate system.

🛠 [iOS] CGSize, CGPoint, CGRect 설명하시오.

[ZeddiOS] https://zeddios.tistory.com/201

 

  • CGSize → 넓이 (Weight)와 높이 (Height) 정보를 포함하고 있는 구조체입니다.
  • CGPoint (좌표) 2차원의 좌표계 시스템에서 좌표계에 X축 그리고 Y축에 대응하는 점 (Point)을 포함하고 있는 구조체입니다. 
  • CGRect 직사각형 (Rectangle)의 위치과 크기 정보를 포함하고 있는 구조체입니다.

🛠 [iOS] Delegate 그리고 DataSource란 무엇인지 설명하시오. 

델리게이트 (Delegate)는 UITableView 또는 UICollectionView의 시각적인 부분 수정, 행의 선택 관리, 액세서리뷰 지원 그리고 개별 행 편집을 구현할 때 사용합니다. 또한 UITableView 또는 UICollectionView의 세세한 부분을 조정할 수있습니다.

 

  • Create and manage custom header and footer views.
  • Specify custom heights for rows, headers, and footers.
  • Provide height estimates for better scrolling support.
  • 들여쓰기 (Indent) row content.
  • Respond to row selections.
  • Respond to swipes and other actions in UITableView or UICollectionView rows.
  • Support editing the UITableView or UICollectionView's content.

 

데이터 소스 (DataSource)UITableView 또는 UICollectionView를 생성하고 수정하는데 필요한 정보를 UITableView 또는 UICollectionView 객체에 제공합니다. 데이터 소스 (DataSource)는 데이터 모델의 델리게이트 (Delegate)로, UITableView 또는 UICollectionView의 시각적 모양에 대한 최소한의 정보를 제공합니다.

 

  • Reporting the number of sections and rows in the UITableView or UICollectionView.
  • Providing cells for each row of the UITableView or UICollectionView.
  • Providing titles for section headers and footers.
  • Configuring the UITableView or UICollectionView's index, if any.
  • Responding to user- or UITableView or UICollectionView.-initiated updates that require changes to the underlying data.

🛠 [Swift] Swift Standard Library의 map, filter, reduce, compactMap, flatMap에 대하여 설명하시오.

 

🛠 Map  클로저 (Closure)를 통하여 순차적인 원소들을 주어진 조건에 맞춰 반영하여 그러한 결과물을 새로운 배열로 반환하며 배열, 딕셔너리, 세트, 옵셔널 등에서 사용할 수 있습니다. 더 정확히 말하자면 Sequence, Collection 프로토콜을 따르는 타입과 옵셔널은 모두 맵을 사용할 수 있습니다. 그래서 맵은 기존 데이터를 변형하는데 자주 사용이 됩니다.

 

Map 사용에 대한 예제 소스 코드는 아래와 같습니다.

let cast = ["Vivien", "Marlon", "Kim", "Karl"]

let lowercaseNames = cast.map { $0.lowercased() }
// 'lowercaseNames' == ["vivien", "marlon", "kim", "karl"]

let letterCounts = cast.map { $0.count }
// 'letterCounts' == [6, 6, 3, 4]

 

🛠 Filter 클로저 (Closure)를 통하여 순차적인 원소들을 비교하여 조건에 맞는 결과물을 가진 새로운 배열을 반환합니다. 또한, filter 함수의 매개변수로 전달되는 함수의 반환 타입은 Bool 입니다.해당 콘텐츠의 값을 갖고 새로운 컨테이너에 포함될 항목이라고 판단하면 ture, 포함하지 않으려면 false 반환합니다.

 

Filter 사용에 대한 예제 소스 코드는 아래와 같습니다.

let cast = ["Vivien", "Marlon", "Kim", "Karl"]
let shortNames = cast.filter { $0.count < 5 }
print(shortNames)
// Prints "["Kim", "Karl"]"

 

🛠 Reduce  클로저 (Closure)를 사용하여 나열된 원소들을 하나의 결과 값으로 반환합니다. 배열이라면 배열의 모든 값을 전달인자로 전달받은 클로저의 연산 결과로 하나의 결과로 합하여줍니다.

 

Reduce 사용에 대한 예제 소스 코드는 아래와 같습니다.

let numbers = [1, 2, 3, 4]
let numberSum = numbers.reduce(0, { x, y in
    x + y
})
// numberSum == 10

 

🛠 CompactMap 나열 된 원소들 중에서 nil이 아닌 값을 추출하여 새로운 배열로 반환합니다.

 

CompactMap 사용에 대한 예제 소스 코드는 아래와 같습니다.

let possibleNumbers = ["1", "2", "three", "///4///", "5"]

let mapped: [Int?] = possibleNumbers.map { str in Int(str) }
// [1, 2, nil, nil, 5]

let compactMapped: [Int] = possibleNumbers.compactMap { str in Int(str) }
// [1, 2, 5]

 

🛠 FlatMap  여러개의 배열을 하나의 배열로 만들어 새로운 배열로 반환합니다.

 

FlatMap 사용에 대한 예제 소스 코드는 아래와 같습니다.

let numbers = [1, 2, 3, 4]

let mapped = numbers.map { Array(repeating: $0, count: $0) }
// [[1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]

let flatMapped = numbers.flatMap { Array(repeating: $0, count: $0) }
// [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]

 🛠 [Swift] 구조체 (Struct)와 클래스 (Class) 의 차이점을 설명하시오.

🛠 공통점

  • 값을 저장하기 위해서 프로퍼티를 정의할 수 있습니다.
  • 기능 실행을 위해서 메서드를 정의할 수 있습니다.
  • 서브 스크립트 문법을 통하여 구조체 또는 클래스가 갖는 값에 접근하도록 서브 스크립트를 정의할 수 있습니다.
  • 초기화될 때의 상태를 지정하기 위해서 이니셜 라이저를 정의할 수 있습니다.
  • 초기 구현과 더불어 새로운 기능을 추가 위해서 익스텐션 (Extension)을 통하여 확장할 수 있습니다.
  • 특정 기능을 실행하기 위해서 특정 프로토콜을 준수할 수 있습니다.

 

🛠 차이점

  • 구조체는 클래스와 달리 상속을 할 수 없습니다.
  • 타입 캐스팅은 클래스의 인스턴스에서만 사용이 가능합니다.
  • Deinitializer는 클래스의 인스턴스에서만 사용할 수 있습니다.
  • 참조 횟수 계산 (Reference Counting)은 클래스의 인스턴스에서만 적용됩니다.

 

더욱 세부적인 정보는 [iOS] Swift 구조체와 클래스 차이점 (Struct and Class Difference) 게시물을 통하여 확인할 수 있습니다.


 🛠 [Swift] NSOperationQueue 와 GCD Queue 의 차이점을 설명하시오.

  1. Operation Queue에서는 동시에 실행할 수 있는 연산(Operation)의 최대 수를 지정할 수 있습니다.
  2. Operation Queue에서는 KVO(Key Value Observing)을 사용할 수 있는 많은 프로퍼티들이 있습니다.
  3. Operation Queue에서는 연산(Operation)을 일시 중지, 다시 시작 및 취소를 할 수 있습니다.

 

💊 Operation Queue vs Dispatch Queue for Application Example

  • Operation Queue 비동기적으로 실행되어야 하는 작업을 객체 지향적인 방법으로 사용하는 데 적합합니다. KVO(key Value Observing)를 사용해 작업 진행 상황을 감시하는 방법이 필요할 때도 적합합니다.
  • GCD (Grand Central Dispatch) 작업이 복잡하지 않고 간단하게 처리하거나 특정 유형의 시스템 이벤트를 비동기적으로 처리할 때 적합합니다. 예를 들면 타이머, 프로세스 등의 관련 이벤트입니다.

 🛠 [Swift] 프로퍼티 래퍼 (Property Wrapper)에 대해서 설명하시오.

특정한 제약이나 기능 등을 정의해 둔 클래스, 구조체, 열거형 타입에 적용하여 그 타입 이름과 동일한 커스텀 속성을 만들어 주는 선언 속성을 말합니다. 새로 만들어진 커스텀 속성을 프로퍼티에 선언하면, 그 프로퍼티를 사용하는 것만으로 래퍼 타입의 인스턴스에 접근하여 미리 구현 된 기능을 손쉽고 깔끔하게 재사용할 수 있습니다. 따라서 프로퍼티에 적용할 수 있는 커스텀 속성을 직접 정의하고 활용하도록 도와줍니다.

 

대표적인 속성들로는 @IBOutlet, @NSCopying, @objc, lazy, @State 등이 있습니다.

 

* 지역 변수 (Local Variable)과 전역 변수 (Global Variable)에는 프로퍼티 래퍼 (Property Wrapper)를 적용할 수 없습니다.


🚀 REFERENCE

더보기
 

JeaSungLEE/iOSInterviewquestions

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

github.com

 

[부스트코스] iOS 프로그래밍 강좌소개 : edwith

- 부스트코스

www.edwith.org

 

스위프트 프로그래밍

문법을 넘어 프로그래밍 패러다임도 익히는 스위프트 5스위프트 5의 핵심 키워드는 ‘안정화’다. ABI 안정화 덕분에 버전과 환경에 크게 영향받지 않고 더 유연하게 스위프트를 사용할 수 있게 되었다. 최신 패러다임과 다양한 언어의 기능을 흡수하여 언어 전반에 걸쳐 안정화되었다. 기존 스위프트 업데이트의 주된 목적이 새로운 기능 추가였다면, 이번 스위프트 5는 비약적으로 발전한 기능을 세세하게 보정하고 다듬었다. 그렇다고 굵직한 변화가 없는 것은 아니다. 스

book.naver.com

 

iOS ) CGRect와 CGSize의 차이, 그리고 CGPoint

안녕하세요 :) Zedd입니다. 오늘은!! CGRect와 CGSize의 차이에 대해서 알아볼거에요 :-) + 원래 CGRect와 CGSize의 차이점만 쓰고있었는데, 쓰다보니 CGPoint도 설명해야하게됐네요 XD.. 이번에 프로젝트하

zeddios.tistory.com

 

ios intrinsicContentSize에 대해서 알아보기 – 마기의 개발 블로그 – 즐겁게 개발을 하고 싶은 욕심

안녕하세요. 마기입니다. 이번에는 UIView API 관련 포스팅을 하려고 합니다. UIView의 size와 관련된 intrinsicContentSize 프로퍼티와 invalidateIntrinsicContentSize() 메소드 에 대해서 알아보겠습니다. intrinsicCon

magi82.github.io

 

스윗한 SwiftUI

더 우수한 앱을 더 적은 코드로!SwiftUI를 활용한 스마트한 iOS 앱 개발 길라잡이애플이 UIKit를 지원하기 시작한 지 11년, 그리고 Swift를 발표한 지 5년 만에 드디어 Swift를 기반으로 처음부터 완전히

book.naver.com

반응형

댓글