본문 바로가기

Swift25

[RxSwift] Observable과 Operator 개념 파헤치기 [1] Observable Rx 코드의 기반 T 형태의 데이터 snapshot을 '전달' 할 수 있는 일련의 이벤트를 비동기적으로 생성하는 기능 하나 이상의 observers가 실시간으로 어떤 이벤트에 반응 세 가지 유형의 이벤트만 방출 RxSwift은 비동기 이벤트 기반 프로그래밍을 지원하여, iOS 앱 개발에서 매우 유용하다. 이러한 비동기 이벤트 기반 프로그래밍에 가장 중요한 요소 중 하나가 Observable이다. next, error, completed Observable은 RxSwift에서 가장 기본적인 개념 중 하나이다. Observable은 이벤트를 발생시키는 객체로, 이벤트는 3가지 종류가 있다. enum Event { case next(Element) // 시퀀스의 다음 요소 case erro.. 2023. 7. 13.
[Swift] Class에서 Final, Private를 쓰면 정말 성능이 향상될까? Class의 성능을 향상하기 위해서는 final 및 private을 사용하는 것이 권장됩니다. Swift의 Class와 Protocol은 모두 참조 타입(reference type)입니다. Class는 상속과 오버라이드가 가능해 컴파일 타임에서 적절한 타입을 추론할 수 없어 런 타임에서 결정되게 됩니다. 런 타임에서 Class는 V-Table, Protocol은 W-Table을 사용하여 Dynamic Dispatch를 수행합니다 앱 생성 시 대개 ViewController를 상속받아서 UIViewController 클래스와 함께 Dynamic Dispatch가 작동하도록 코드를 작성합니다. Dynamic Dispatch는 Static Dispatch에 비해서 성능이 뒤떨어질 수밖에 없는데요. 애플에서는 .. 2023. 6. 30.
[Swift] AnyObject 프로토콜 상속과 Any/AnyObject 사용을 지양하는 이유 Swift에서는 타입 안정성을 지향하기 때문에 Any/AnyObject를 사용하는 것은 지양됩니다. 이는 코드를 컴파일 시에 타입 안정성을 보장하기 위함입니다. 따라서, 가능하면 Any/AnyObject 대신에 구체적인 타입을 사용하는 것이 좋습니다. 그러나, 어떤 경우에는 클래스 인스턴스만 해당 프로토콜을 채택할 수 있도록 지정해야 할 때가 있습니다. 예를 들어, 다음과 같은 프로토콜이 있다고 가정해봅시다. protocol MyProtocol: AnyObject { func myFunction() } 이 프로토콜은 AnyObject 프로토콜을 상속하고 있기 때문에, 해당 프로토콜을 채택하는 클래스 인스턴스만 프로토콜을 채택할 수 있습니다. 따라서, 이 경우에는 Any/AnyObject 대신에 클래스 인.. 2023. 6. 13.
[Swift] iOS에서 네이버 날씨 크롤링 하기 지난 포스팅에서 RESTful API에 대해서 배워보았습니다. Restful API란 무엇인가? 간혹 iOS개발자 구인글을 보면 ‘REST API’ 혹은 ‘RESTful API’ 통신에 대한 이해 를 우대한다는 것을 쉽게 볼 수 있는데 이번 포스팅에서는 RESTful API에 대해서 알아보겠습니다. 개요 RESTful API는 Repr jimmy-ios.tistory.com HTML 삽입 미리보기할 수 없는 소스 API와 HTTP통신에 대한 이해를 바탕으로 네이버 날씨 API에서 URI주소를 분석해 쿼리값을 알아내고 하나씩 뜯어보며 크롤링 하는 방법을 알아보겠습니다. 그리고 받아온 데이터를 Swift에서 어떻게 받아오고 가공하는지 알아보겠습니다. 네이버 날씨 웹 페이지 우선 네이버 날씨에 들어가서 기상청.. 2023. 6. 10.
[Swift]에서 Mock 객체 만들기와 Protocol 주입을 통한 Unit Test 소개 Swift에서는 Unit Test를 위해 XCTest Framework을 제공하고 있습니다. 이를 통해 개발자들은 코드의 품질을 높이고 버그를 방지할 수 있습니다. 이번 포스팅에서는 Swift에서 Mock 객체를 만들고 Protocol 주입을 통해 Unit Test하는 과정에 대해 자세히 알아보겠습니다. Mock 객체란? Mock 객체란, 테스트를 위해 실제 객체를 대신하여 사용되는 가짜 객체입니다. 실제 객체와 동일한 인터페이스를 가지지만, 내부적으로는 테스트를 위한 로직을 구현합니다. 예를 들어, 네트워크 요청을 테스트하기 위해서는 네트워크 요청을 하지 않고 Mock 객체를 사용하여 응답을 받는 것이 좋습니다. 이렇게 Mock 객체를 사용하면, 테스트의 성능을 향상시킬 수 있습니다. Protoc.. 2023. 6. 10.
[Swift] 의존성 주입(Dependency Injection) 객체간 결합도를 낮추기 위해서 어떤 개념을 알아야 할까요? Swift에서는 객체 간의 의존성 관계를 명확히 하고, 코드의 재사용성을 높이기 위해 의존성 주입(Dependency Injection) 이라는 기법을 사용합니다. 의존성 주입은 말 그대로 '의존성을 주입한다'는 뜻으로, A라는 변수에 B라는 값을 할당하려면 반드시 C라는 메서드를 이용해야 하는 구조를 말합니다. 의존성 주입을 사용하면 객체 간의 결합도를 낮출 수 있습니다. 의존성이 높은 객체는 다른 객체에 의존할 때 의존 객체가 변경될 경우 영향을 받습니다. 이를 방지하기 위해 의존성을 낮추면 객체는 자신의 역할과 책임에 집중할 수 있으며, 다른 객체와의 상호작용도 간단해집니다. 하지만 의존성 주입이 쉬운 작업은 아닙니다. 특히 여러 개의 모듈.. 2023. 6. 8.