의존성 주입이 대체 무엇이냐
용어를 보면 굉장히 어려울 것 같아서 무섭다...
근데 알고보면 별것이 아님
일단
의존성이 생긴다는 말과 의존성을 주입한다는 말은 동일한 말이 아니다
객체간의 의존성을 줄이기 위해 의존성을 주입한다고 말해야 맞는 듯 ,,
다시 설명하자면
일단 어떤 클래스에서 다른 클래스를 사용하는 경우 '의존성'이 생긴다고 한다.
그러나 의존성이 생기는 것 중에서도 클래스간의 의존성을 줄이기 위하여 내부에서 객체를 생성하여 사용하지 않고, 외부에서 객체를 생성해서 넣어주는 방법을 바로 의존성 주입이라고 한다.
그럼 의존성 주입을 왜 하냐??
의존성 주입의 장점
단점
(굵은 글씨가 의존성 주입)
1. B 클래스를 싱글턴으로 사용
2. 프로퍼티로 B 클래스를 가지고 있는 방식
3. 메서드의 전달인자로 참조를 전달받는 방식
B 클래스를 싱글턴으로 사용
A 클래스에서 B 클래스의 기능을 사용하기위한 가장 쉬운 방법은 그 클래스를 싱글턴으로 만들어서 언제든지 부르는 것이다. 하지만 이는 A 클래스의 기능을 테스트하기 위해서는 B가 반드시 필요하기때문에 testable하지 않다.
프로퍼티로 B 클래스를 가지고 있는 방식
프로퍼티 기본값으로 A클래스가 B클래스를 직접 가지고있거나, 이니셜라이저에서 B클래스를 받아 초기화하거나, A 클래스 초기화 이후에 A 의 프로퍼티에 할당하는 방법으로 가질 수 있다.
1) A 클래스가 B 클래스를 직접 생성: 프로퍼티 기본값
2) A 클래스의 이니셜라이저에서 참조를 전달받는 방식
3) A 클래스 초기화 이후 외부에서 속성에 접근하여 전달
여기서 2),3)번의 경우가 의존성 주입이라고 할 수 있겠다.
Reference
[iOS] Dependency Injection (의존성 주입) 이란?
iOS 의존성 주입(Dependency Injection) 알아보기
DI(Dependency Injection)에 대해 알아보자