-
Swinject 사용, DI란?Swift 2021. 6. 30. 13:20
DI
: Dependency Injection 즉, 의존성 주입. 객체 자체가 아니라 Freamework에 의해 객체의 의존성이 주입되는 설계 패턴이다. 즉 디자인 패턴중에 하나인셈.
* 그걸 Swift에서는 어떤식으로 적용하고, 활용할 수 있을까? 기본 내용을 알고 있다면 바로 아래쪽 Swinject로 이동하길 바란다...
의존성
먼저, 짧게 의존성이란 무엇일까?
final class AClass { var test: Int = 0 } final class BClass { var instance = AClass() } // B에서 A를 내부 변수로 사용한다? -> B틀래스는 A클래스와 의존관계가 생깁니다.
위의 예제는 B에 A에대한 의존 관계가 생기는것이다.
주입
바로 내부가 아닌 외부에서 객체를 생성해서 넣어주는것이다.
final class AClass { var test: Int = 0 } final class BClass { var getTest: Int? init(number: Int) { self.getTest = number } } let b = BClass(number: AClass().test)) // 이런식으로 외부에서 생성해서 함수를 통해 넣어주는것이다.
위의 내용은 대표적인 생성자를 활용한 의존성있는 객체를 외부에서 넣어주는것이죠.
의존성 분리
이미 알고있는 Swift의 protocol이 바로!!!!! 이 의존성 분리이죠! POP (Protocol oriented progoramming) 프로토콜 지향 프로그래밍등 이미 많이 접하고 들어봤을 내용입니다.
구현체 입장에서는 오직 프로토콜이 요구하는 변수와 함수 즉 각각은 독립적이고, 공통의 프로토콜을 따른다고 이해하면 쉽다.
protocol DependencyDelegate: AnyObject { var needThisData: Int { get set } // func 함수도 가능 } class AClass: DependencyDelegate { var needThisData = 0 } class BClass { var dependencyDelegate: DependencyDelegate init(delegate: DependencyDelegate) { self.dependencyDelegate = delegate } } print(Bclass(delegate: AClass())
이렇게 했을때 protocol만 준수하면 된다는 점을 알 수 있다.
1. init에 넣을 수도 있고, 2. 선언된 변수에 넣을수도 있고, 3. setData() 등의 함수로도 넣을 수 있다.
이때 아래 필드 주입 대신 생성자주입을 사용해야한다는 내용을 공유한다.
https://zorba91.tistory.com/238
++ 다형성이란?
Polymorphism 다형성이란, 간단하게 같은 인터페이스로 여러 타입과 상호작용할 수 있는 개념이다.
짧은 예시로 위의 말을 하자면, HOME 이라는 인터페이스 아래에 아파트, 단독주택 이렇게 있고 각각 살고있다 또는 주인 등의 동작의 구현만 달리 하거나 변수를 지정할 수 있다.(음료수 - 콜라, 사이다)
OOP나 POP 모두 이를 각각의 방식으로 구현한다고 이해하면 좋을 것 같다. <- Protocol~
장점
- 종속성 감소
- 재사용성 증가
- 테스트 코드 작성 용이
- 코드 분석 및 파악 용이
Swinject
Swift DI 라이브러리 : https://github.com/Swinject/Swinject
import Swinject
+ 예시 추후 추가
728x90'Swift' 카테고리의 다른 글
Swift Thread 처리에 대해 (Operation Queue vs Dispatch Queue) (0) 2021.07.07 URL Session 에 대해서 (0) 2021.07.06 xcode 오류 nw_connection_copy_protocol_metadata [C20] Client called nw_connection_copy_protocol_metadata on unconnected nw_connection (0) 2021.06.29 weak self 에 대해서 (언제나 하는걸까?) (0) 2021.06.18 Operation Queue (0) 2021.05.26