목록dependency injection (5)
sanichdaniel의 iOS 개발 블로그
의존성 주입을 위해 DI 컨테이너를 사용하는 방식을 채택했다. 이때 어느곳에서 DI 컨테이너로부터 의존성을 받아와야 할까라는 의문이 들었다. 예를들어 A 객체는 외부에 의존성이 있고, A 객체는 B 객체에서 생성되는 상황이다. A가 직접 컨테이너에 접근해서 의존성을 받아와야 할까? 그러면 A가 컨테이너에 의존하게 된다. B가 A를 생성할때 컨테이너에 접근한다면 B가 컨테이너에 의존성이 생기니, 의존성 해결을 생성해주는 쪽으로 미룬것이나 다름없다. 이런 고민을 하던중 Pure DI 에대해 알게되었다. Pure DI DI 컨테이너 없이, Composition Root 한곳에서 모든 의존성이 주입된다. 출처: blog.ploeh.dk/2014/06/10/pure-di/ Compositon Root 의존성 트리..
iOS에서는 정형화된 DI 방식이 없는데, Android에서는 Dagger을 많이들 쓰는것 같았다. Dagger을 참고하여 iOS에서 DI를 구현해보면 어떨까하는 생각에 이르게 되었다. 프로퍼티 래퍼를 이용해 의존성 주입을 할려했으나, 실상은 Service Locator 패턴에 가까웠다. 프로퍼티 래퍼를 통해 Locator 레이어를 타겟 객체로부터 숨겼던것 뿐이었다. 하지만 타겟 객체가 직접 의존성을 요청하지 않고, 프로퍼티 래퍼 안에서 의존성을 요청한다는점에서 Serice Locator 패턴에서 진화된 형태로 볼 수 있을거시다. 프로퍼티 래퍼를 이용한 Service Locator 패턴의 장점으로는 단순함이 있을것 같다. 어떻게, 어디서 의존성을 넣어줄지 고민을 안해줘도 된다. @어노테이션만 붙이면 타겟..
프로퍼티 래퍼를 이용하여 DI를 구현해보던중 안드로이드 Dagger2를 참고해보면 좋을것 같다는 생각이 들어 Dagger를 공부해보았다. Dagger의 장점으로는 어노테이션만 붙이면 의존성이 해결된다는 점이다. 즉 작업하면서 의존성에대해 고민할 필요가 없어진다. Dagger 기본개념 1. Module 2. Inject 3. Component 4. Subcomponent 5. Scope 1. Module 의존성을 생성하는 함수들을 가진 클래스 @Module은 클래스에 붙고 @Provides는 각 메서드에 붙는다 대거가 이 모듈을 파싱할때, 리턴 타입과 메서드를 associate 한다. 근데 만약 함수가 인자를 받는다면, 그 인자의 타입과도 associate 한다. (associate한다가 어떤 의미지?) ..
Property Wrapper을 이용하여 DI를 작업하다가, Property Wrapper을 이용한 DI는 DI가 아니라 Service Locator 패턴이라는 글을 읽어서 Service Locator 패턴이 무엇인지 궁금해졌다. DI와 Service Locator 모두 IoC 구현 방법중 하나이다. Inversion of Control 원리는 말 그대로 제어 흐름을 반대로 한다는 뜻이다. Dependency Injection 타겟 객체는 외부에서 의존성을 주입받는다. 장점 1. 유닛 테스트 하기 수월하다. 외부에서 mock으로 갈아끼워서 넣어주면 된다 2. 생성자만 보고 어떤 의존성이 있는지 알 수 있다. Service Locator Service Locator는 앱에서 사용되는 모든 의존성에 대해 알..