ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.