iOS 59

[iOS / UIKit] @IBDesignable과 @IBInspectable

Q. iOS Application 개발 과정에서 @IBDesignable과 @IBInspectable에 대해서 설명해 줘 A. @IBDesignable과 @IBInspectable은 Interface Builder에서 뷰를 디자인하고 구성할 때 사용되는 어노테이션입니다. @IBDesignable은 커스텀 뷰 클래스에 적용되며, Interface Builder에서 해당 클래스를 선택하면 해당 뷰의 레이아웃과 디자인을 실시간으로 미리 볼 수 있게 해줍니다. 이를 위해 해서는 해당 뷰 클래스에 '@IBDesignable' 어노테이션을 추가하고, Interface Builder에서 해당 뷰를 사용할 때 미리보기를 위해 사용될 코드를 'prepareForInterfaceBuilder()' 메서드에 작성해야 합니다..

iOS/UIKit 2023.04.24

[Swift] Tail recursion(꼬리 재귀함수)

Q. Tail recursion이 무엇인지 설명해 줘 A. Tail recursion은 함수가 호출된 후, 함수가 실행을 끝내기 전에 마지막으로 다시 자신을 호출하는 재귀 함수의 형태를 말합니다. 이러한 재귀 함수에서는, 함수 호출이 함수 실행이 끝나기 전에 마지막으로 발생하기 때문에, 스택 메모리의 사용을 최적화할 수 있습니다. 일반적인 재귀 함수는 함수가 호출될 때마다 새로운 스택 프레임이 생성되어 스택 메모리에 저장됩니다. 이는 재귀 함수의 호출 수가 많아지면 스택 메모리를 많이 사용하게 되어 스택 오버플로우 에러가 발생할 가능성이 있습니다. 하지만 Tail recursion의 경우, 함수가 실행을 끝내기 전에 마지막으로 자기 자신을 호출하므로, 스택 프레임을 계속해서 생성하지 않아도 됩니다. 대신..

iOS/Common 2023.04.18

[Swift] Array에서 활용되는 함수들과 시간 복잡도

Q. Swift의 Array에서 활용되는 함수 전체에 대하여 함수 이름, 시간 복잡도, 사용 예시로 나눠서 설명해 줘 A. Swift의 Array에서 활용되는 함수들은 크게 배열에 요소를 추가/제거하는 함수, 배열을 조작/검색하는 함수, 배열의 요소를 정렬하는 함수, 배열의 메모리를 관리하는 함수로 구분할 수 있습니다. 이번에는 이러한 카테고리로 나누어서 각 함수의 이름, 시간 복잡도, 사용 예시를 설명해드리겠습니다. 배열에 요소를 추가/제거하는 함수 1. append(_:) - 배열의 맨 뒤에 요소를 추가합니다. - 시간 복잡도: O(1) var arr = [1, 2, 3] arr.append(4) // arr: [1, 2, 3, 4] 2. removeLast() - 배열의 맨 뒤에 있는 요소를 제거합..

iOS/Common 2023.04.17

[Swift] 네이티브의 WKWebView와 웹의 JavaScript 간 통신 방법

Q. iOS 애플리케이션 개발 과정에서 WKWebView를 사용할 때 JavaScript와 통신하는 방법에 대하여 Native는 Swift 코드로, Web은 JavaScript 코드로 설명해 줘 A. WKWebView를 사용하여 iOS 애플리케이션과 웹과 JavaScript를 통신하기 위해서는 'WKScriptMessageHandler' 프로토콜을 구현하고, 해당 핸들러를 사용하여 메시지를 보내고 받아야 합니다. 이를 설명하기 위해, 아래는 Swift 코드와 JavaScript 코드를 사용한 예시입니다. 1. 'WKScriptMessageHandler' 프로토콜을 채택하고 메시지를 처리하는 클래스를 생성합니다. Swift class MessageHandler: NSObject, WKScriptMessag..

iOS/Common 2023.04.14

[Objective-C] Objective-C의 block과 Swift의 closure

Q. Objective-C의 block과 Swift의 closure의 각 정의와 공통점, 그리고 차이점을 설명해 줘 A. Objective-C의 Block과 Swift의 Closure는 모두 코드 블록을 나타내는 기능입니다. Closure는 Swift에서 함수를 변수나 상수에 저장하거나 전달할 수 있는 기능입니다. Closure는 중괄호로 감싸진 코드 블록으로, 함수처럼 매개 변수와 반환 값이 있는 경우도 있고, 없는 경우도 있습니다. 예를 들어, 아래와 같은 Closure를 정의할 수 있습니다. let myClosure = { (a: Int, b: Int) -> Int in return a + b } 위 Closure는 Int 타입의 매개 변수 a와 b를 받아서, 두 매개 변수를 더한 값을 Int 타입..

iOS/Objective-C 2023.04.13

[Swift] 누군가 REST API를 묻거든 고개를 들어 어딜 봐야 하지..?

Q. REST API의 정의에 대해 설명해 줘 A. REST API란 Representational State Transfer(자원 상태 전달)의 약자로, 웹에서 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 방식을 말합니다. REST API는 HTTP 프로토콜을 기반으로 동작하며, 클라이언트와 서버 간의 통신을 위해 사용됩니다. REST API는 자원(Resource), 행위(Verb), 표현(Representation)으로 구성됩니다. 자원은 URI(Uniform Resource Identifier)로 구분되며, 자원을 조작하기 위한 행위는 HTTP메서드(GET, POST, PUT, DELETE 등)를 사용합니다. 표현은 클라이언트가 자원의 상태를 표현하는 방법을 의미합니다. 대부분의 경우 J..

iOS/Common 2023.04.12

[Swift] Deep link (Universal Links, Custom URL Scheme)

iOS에서 Deep link를 구현하는 방식은 Universal Links와 Custom URL Scheme 두 가지로 나눌 수 있습니다. 1. Universal Links Universal Links는 앱과 웹 사이트 간에 Deep link를 지원하는 Apple의 공식 기술입니다. Universal Links를 사용하면 앱이 설치되어 있지 않은 경우에도 사용자를 앱 스토어로 이동시키지 않고 직접 앱으로 연결할 수 있습니다. Universal Links를 구현하는 방법은 다음과 같습니다. - 앱과 웹 사이트에 도메인이 등록되어 있어야 합니다. - 앱에서 Associated Domains entitlements를 활성화하고, 앱과 연결할 도메인을 추가해야 합니다. - 웹 사이트에서도 Associated D..

iOS/Common 2023.04.12

[Objective-C] atomic vs nonatomic

Q. atomic과 nonatomic에 대해 설명해 줘 A. 'atomic'과 'nonatomic'은 Objective-C의 프로퍼티 속성 중 하나로, 멀티 스레드 환경에서 객체를 안전하게 접근할 수 있는 방법을 제공합니다. 'atomic'은 멀티 스레드 환경에서 객체에 접근할 때, 해당 객체에 대한 접근을 원자적으로 처리하는 것을 의미합니다. 다시 말해, 하나의 스레드에서 객체에 접근하는 도중 다른 스레드에서 접근하려고 하면, 해당 스레드를 기다리도록 합니다. 이렇게 함으로써 하나의 스레드에서 객체에 대한 작업을 완전히 마칠 때까지 다른 스레드가 접근할 수 없도록 보호됩니다. 반면에 'nonatomic'은 멀티 스레드 환경에서 원자적으로 처리하지 않고, 다른 스레드에서 객체에 접근할 수 있습니다. 'n..

iOS/Objective-C 2023.04.12

[Objective-C] Objective-C에서의 메모리 관리

Q. Objective-C로 iOS 애플리케이션을 개발하는 과정에서 ARC가 적용된 시기는 iOS 버전 몇 때부터인지 알려줘 A. Objective-C에서 ARC(자동 참조 계산)는 iOS 5 이상에서 지원됩니다. 이전 버전의 iOS에서는 수동으로 메모리 관리를 해야 했습니다. 따라서 iOS 5 이전 버전에서 개발할 경우에는 수동으로 메모리를 관리해야 합니다. Q. 수동으로 메모리를 관리하는 Objective-C 코드를 보여줘 A. Objective-C에서 수동으로 메모리를 관리하기 위해서는 메모리를 할당할 때 'alloc' 메소드를 사용하고, 메모리를 해제할 때 'release' 메소드를 호출해야 합니다. 또한, 객체를 참조할 때는 'retain' 메소드를 사용해서 참조 횟수를 증가시키고, 참조를 해제..

iOS/Objective-C 2023.04.12