iOS/Common 34

[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

[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

[Swift] SOLID 원칙에 관하여

Q. Swift 코드를 예시로 SOLID 원칙에 대해 설명해 줘 A. 좋습니다! SOLID 원칙은 소프트웨어 개발에서 유지보수, 확장성, 유연성 등의 측면에서 코드의 품질을 높이기 위해 사용되는 원칙들의 집합입니다. Swift 언어를 예시로 설명하면서 SOLID 원칙을 적용하는 방법을 알아보겠습니다. 1. Single Responsibility Principle (SRP) - SRP는 하나의 클래스는 하나의 책임만을 가져야 한다는 원칙입니다. - 예를 들어, ViewController가 UI 관리와 데이터 로딩을 모두 담당하면 SRP를 위반하는 것입니다. - 따라서, ViewController를 화면 표시를 담당하는 View와 데이터 로딩을 담당하는 ViewModel로 나누어서 구현하는 것이 좋습니다. ..

iOS/Common 2023.04.10

[Swift] 의존성 주입에 관하여(feat. Swinject, Dip, Typhoon)

Q. Swift로 iOS 애플리케이션을 개발하는 과정에서 의존성 주입의 정의와 방법, 그리고 각 방법의 장단점에 대해 설명해 줘 A. 의존성 주입(Dependency Injection)은 객체 지향 프로그래밍(OOP)에서 사용되는 디자인 패턴 중 하나로, 클래스나 모듈 간의 의존성을 줄이고 유연성을 높이기 위해 사용됩니다. 의존성이란 객체 간의 상호작용을 의미하며, 한 객체가 다른 객체를 사용할 때 의존성이 생깁니다. iOS 애플리케이션을 개발할 때도 여러 클래스나 모듈 간에 의존성이 생기는데, 이를 관리하기 위해 의존성 주입을 사용할 수 있습니다. 이를 통해 의존성을 외부에서 주입하여 클래스나 모듈을 유연하게 만들 수 있으며, 코드의 재사용성을 높일 수 있습니다. 의존성 주입 방법에는 크게 세 가지가 ..

iOS/Common 2023.04.10

[Swift] 함수형 프로그래밍(feat. 순수 함수)

Q. 함수형 프로그래밍의 정의를 설명해 줘 A. 함수형 프로그래밍은 계산을 수학적 함수의 조합으로 생각하고, 이러한 함수들의 조합으로 프로그램을 작성하는 프로그래밍 패러다임입니다. 이를 통해 부작용을 최소화하고, 상태 변화를 제어하여 프로그램의 안정성과 가독성을 높일 수 있습니다. 함수형 프로그래밍에서는 함수가 순수 함수여야 합니다. 즉, 함수는 입력값에 대해 항상 동일한 결과값을 반환하며, 함수 외부의 상태를 변경하지 않아야 합니다. 이를 통해 함수 호출이 항상 예측 가능하게 되고, 코드를 이해하고 디버깅하기 쉬워집니다. 또한 함수형 프로그래밍에서는 불변성을 중요시합니다. 즉, 한번 정의된 값은 변경되지 않아야 합니다. 이를 통해 병렬 처리를 용이하게 만들 수 있으며, 불필요한 상태 변경으로 인한 버그..

iOS/Common 2023.04.10

[Swift] struct, class, enum

Q. Swift에서 struct, class, enum 각각의 특징과 차이점을 비교해서 설명해 줘 A. Swift에서 sturct, class, enum은 모두 데이터 모델링을 위한 구조체입니다. 각각의 구조체는 고유한 특징과 용도가 있습니다. Struct(구조체) - 값 타입(Value Type) - 생성자(constructor) 필요 없음 - 상속 불가능 - 구조체 인스턴스를 상수로 선언하면 변경 불가능 - 메모리 할당과 해제가 빠름 - 프로퍼티는 기본적으로 모든 인스턴스에 대해 초기화되어야 함 Class(클래스) - 참조 타입(Reference Type) - 생성자 필요 - 상속 가능 - 클래스 인스턴스를 상수로 선언해도 내부 프로퍼티는 변경 가능 - 메모리 할당과 해제가 느림 - 프로퍼티는 초기화..

iOS/Common 2023.04.10

[Swift] protocol에 관하여

야곰, ⟪스위프트 프로그래밍: Swift 5⟫ p.371 프로토콜이란 프로토콜(protocol)은 특정 역할을 하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의합니다. 구조체, 클래스, 열거형은 프로토콜을 채택(Adopted)해서 특정 기능을 실행하기 위한 프로토콜의 요구사항을 실제로 구현할 수 있습니다. 어떤 프로토콜의 요구사항을 모두 따르는 타입은 '해당 프로토콜을 준수(Conform)한다'고 표현합니다. 타입에서 프로토콜의 요구사항을 충족시키려면 프로토콜이 제시하는 청사진의 기능을 모두 구현해야 합니다. 즉, 프로토콜은 정의를 하고 제시를 할 뿐이지 스스로 기능을 구현하지는 않습니다. Q. Swift에서 protocol의 정의와 특징을 설명해 줘 A. Swift에서 protocol은 ..

iOS/Common 2023.04.10

iOS에서의 GCD와 동기, 그리고 비동기(with ChatGPT)

Q. iOS에서 GCD와 동기, 비동기 프로그래밍에 대한 정의를 알려줘 A. iOS 개발에서 Grand Central Dispatch (GCD)는 멀티스레딩 환경에서 비동기적인 작업을 실행하는 데 사용되는 Apple의 기술입니다. GCD를 사용하면 애플리케이션의 성능을 향상하고 사용자 경험을 향상하는 데 도움이 됩니다. GCD는 두 가지 주요 개념인 동기(synchrounous)와 비동기(asynchrounous) 프로그래밍을 사용합니다. 동기(synchrounous) 프로그래밍은 작업이 순차적으로 실행되며 한 작업이 끝나기 전에 다른 작업이 실행되지 않습니다. 반면, 비동기(asynchronous) 프로그래밍은 작업이 동시에 실행되며 작업이 완료되지 않았더라도 다른 작업이 실행됩니다. 비동기 프로그래밍..

iOS/Common 2023.04.10

[Swift] 탈출 클로저(Escaping Closure)

갑자기 탈출이라고? 함수의 전달인자로 전달한 클로저가 함수 종료 후에 호출될 때 클로저가 함수를 탈출(Escape)한다고 표현합니다. 클로저를 매개변수로 갖는 함수를 선언할 때 매개변수 이름의 콜론(:) 뒤에 @escaping 키워드를 사용하여 클로저가 탈출하는 것을 허용한다고 명시해줄 수 있습니다. 비동기 작업으로 함수가 종료되고 난 후 호출할 필요가 있는 클로저를 사용해야 할 때 탈출 클로저(Escaping Closure)가 필요합니다. 만약 @escaping 키워드를 따로 명시하지 않는다면 매개변수로 사용되는 클로저는 기본적으로 비탈출 클로저입니다. 함수로 전달된 클로저가 함수의 동작이 끝난 후 사용할 필요가 없을 때 비탈출 클로저를 사용합니다. 클로저가 함수를 탈출할 수 있는 경우 중 하나는 함수..

iOS/Common 2023.04.10