iOS의 Swift 5.x를 위한 초경량 종속성 주입/서비스 로케이터 프레임워크입니다.
참고: Resolver는 이제 공식적으로 더 이상 사용되지 않으며 새로운 종속성 주입 시스템인 Factory로 대체되었습니다. Factory는 컴파일 시간이 안전하고 Resolver보다 작고 가벼우며 빠른 진정한 컨테이너 기반 종속성 주입 시스템입니다. Resolver가 좋은 만큼 Factory가 더 좋습니다.
종속성 주입 프레임워크는 Inversion of Control 디자인 패턴을 지원합니다. 기술적인 정의는 제쳐두고, 종속성 주입은 다음과 같이 요약됩니다.
| 개체에 작업을 수행하는 데 필요한 항목을 제공합니다.
그게 다야. 종속성 주입을 사용하면 느슨하게 결합된 코드를 작성할 수 있으므로 재사용, 모의 및 테스트가 더 쉽습니다.
자세한 내용은 종속성 주입에 대한 간단한 소개를 참조하세요.
6가지 고전적인 종속성 주입 전략이 있습니다.
Resolver는 이들 모두를 지원합니다. 간략한 설명, 예, 각각의 장단점을 보려면 링크를 따르세요.
Annotations에 관해 Resolver는 이제 Swift 5.1의 새로운 속성 래퍼 구문을 사용하여 서비스 확인을 지원합니다.
class BasicInjectedViewController : UIViewController {
@ Injected var service : XYZService
@ LazyInjected var service2 : XYZLazyService
@ WeakLazyInjected var service3 : XYZAnotherLazyService ?
}
Injected 키워드만 추가하면 종속성이 자동으로 해결됩니다. 이 전략과 기타 전략에 대한 자세한 내용은 Annotation 문서를 참조하세요.
SwiftUI 뷰에 Observable Objects를 주입할 수 있는 @InjectedObject
래퍼도 있습니다.
Resolver는 단일 파일에서 700줄이 넘는 실제 코드로 구현되지만, 이 700줄에는 수많은 기능이 포함되어 있습니다.
TLDR: 다른 것이 없다면 자동 유형 추론, 범위 및 옵션에 대해 읽어보세요.
Resolver를 사용하는 것은 간단한 3단계 프로세스입니다.
앞서 언급했듯이 Resolver는 700줄이 넘는 코드로 구현되고 단일 파일에 포함된 초경량 종속성 주입 시스템입니다.
리졸버는 또한 성능을 위해 설계되었습니다. 예를 들어 SwinjectStoryboard는 훌륭한 종속성 주입 시스템이지만 Resolver는 Swinject보다 종속성 체인을 해결하는 데 약 800% 더 빠른 것으로 나타났습니다.
그리고 다른 시스템과 달리 Resolver는 Objective-C 코드, 메소드 스위즐링 또는 Objective-C 런타임에 대한 내부 종속성 없이 100% Swift 5로 작성되었습니다.
또한 리졸버는 다음을 수행합니다.
마지막으로 자동 유형 추론을 사용하면 Resolver를 사용하여 종속성 주입 코드를 약 40-60% 적게 작성하는 경향이 있습니다.
Resolver는 CocoaPods 및 Swift Package Manager를 지원합니다.
pod " Resolver "
Resolver 자체는 단일 소스 파일(Resolver.swift)이므로 간단히 파일을 다운로드하여 프로젝트에 추가하는 것도 쉽습니다.
Resolver의 현재 버전(1.4)은 Swift 5.3을 지원하며 현재 이 릴리스에서 지원되는 최소 iOS 버전은 iOS 11입니다.
이전 버전 지원에 대한 정보는 설치 가이드를 읽어보세요.
내 Builder 저장소를 공개로 설정했습니다. 다음 예제가 포함된 간단한 마스터/세부 스타일 iOS 애플리케이션입니다.
또한 이를 사용하여 SwiftUI 스타일 빌더 패턴을 사용하여 사용자 인터페이스 구성을 구성하고 네트워크 요청을 구성하는 몇 가지 새로운 코드를 사용합니다. 확인해 보세요.
Resolver에 대한 최근 업데이트로 인해 코드 베이스가 크게 변경될 수 있습니다.
Resolver 1.4에서는 스레드 안전성과 성능이 향상되었습니다. 주요 변경 사항은 없지만 Resolver의 범위에 직접 액세스하는 것은 이제 더 이상 사용되지 않습니다. 참조: 범위.
Resolver 1.3은 Resolver에 네임스페이스를 추가합니다. 이름을 등록하면 자동 완성 기능이 향상되고 잠재적인 런타임 평가 오류가 줄어들어 코드가 더욱 안전해집니다. 이는 가능한 주요 변경 사항입니다. 참조: 명명된 인스턴스
Resolver 1.2에서는 단일 인수와 다중 인수 전달 및 처리에 대한 더 나은 지원을 제공하기 위해 인수가 등록 팩토리에 전달되는 방식을 변경했습니다. 이는 획기적인 변화입니다. 참조: 여러 인수 전달 및 처리
Resolver 1.5에서는 Resolver 내에서 사용되는 여러 등록 및 캐싱 메커니즘을 업데이트했습니다. Resolver의 내부 동작에 의존하는 내용을 작성하지 않는 한 이것은 아마도 문제가 되지 않을 것입니다.
Factory and Resolver에 대한 제 작업을 지원하고 싶다면 GitHub 후원을 고려해 보세요! 지원 증가는 물론 멘토링 및 회사 교육을 위한 다양한 수준이 존재합니다.
아니면 그냥 커피 한 잔 사주세요!
Resolver는 수석 iOS 소프트웨어 엔지니어이자 Medium의 1,000대 기술 작가인 Michael Long이 설계, 구현, 문서화 및 유지 관리합니다.
Michael은 또한 Resolver 작업으로 2021년 Google의 오픈소스 피어 보상(Open Source Peer Reward) 수상자 중 한 명이었습니다.
리졸버는 MIT 라이센스에 따라 사용할 수 있습니다. 자세한 내용은 LICENSE 파일을 참조하세요.