WooKoo Blog

물과 같이

개발/개발

[iOS] - iOS 환경에서 의존성 주입(Dependency Injection) 알아보기

WooKoo 2021. 8. 23. 11:34

의존성 주입을 하면 좋은 점이 많다고 하길래 해당 내용을 iOS를 기준으로 공부해보도록 할 것 이다.

 

먼저 기본적으로 알아야할 개념들이 너무 많아서 전부 다룰 수 있을지 모르겠지만 천천히 정리해보도록 하겠다.

 

 


1. 의존성 주입 (Dependency Injection)

의존성 주입을 한 문장으로 정리하자면 외부에서 초기화해서 클래스 안에 할당해주는 것입니다.

 

2. 장점 (왜쓰는가?)

그럼 의존성 주입을 사용하면 뭐가 좋을까?

1. 재사용성이 높아짐

2. 테스트 용이

3. 코드 단순화

-> 결합도는 낮추면서 유연성과 확장성 향상

 

3. 그럼 의존성이 뭔지 주입이 뭔지 알아보자

 

의존성이란

Mobile 클래스를 Task클래스에서 사용하고 있으니까 의존성이 생기게 된다.

이처럼 어떠한 클래스에서 다른 클래스를 사용하면 의존성이 생긴다고 한다.

 

 

주입은?

 

늘 하던거 있죠??

 

 

여기서 보면 초기화 할 때 "JaeWook"을 주입 합니다.

 

이제 의존성과 주입을 합쳐보면??

 

자 이렇게 의존성 + 주입을 하였습니다.

그런데 이렇게 하면 의존성 주입을 쓰는 의미가 있을까요?? 전혀 분리가 안된 것 같은데 ...

 

4. 의존성 분리 // *제어의 역전 IOC(Inversion Of Control)

그래서 의존성 분리를 한 것 까지가 의존성 주입의 의미라고 보시면 될 것 같습니다.

 

다른 언어는 이를 이용할  때 인터페이스를 사용하고 IOS는 프로토콜을 이용합니다.

 

의존성 분리는 의존관계 역전 원칙을 이용합니다.

 

기본적인 개념은 이정도가 되는 것 같습니다.

 

4. IOC Container

위의  제어권 (즉 프로토콜의 역할) 을 담아두는 곳으로써 객체의 의존성를 관리 및 생성합니다.

컨테이너라는 한 곳에 모아서 사용합니다.

 

보통은 구현이 귀찮고 어려워서 프레임워크를 사용하는데 iOS의 경우에는 SwInject라는 라이브러리가 대표적입니다.

 

사용방법은 밑에서 다뤄보도록 하겠다.

다른 대표적인 라이브러리들은

1. 스프링 컨테이너

2. 피코 컨테이너

3. Guice

가 있고 각각 비교는 다른분이 잘 정리해주셔서 해당 사이트를 참고해주시면 될 것 같고 우리는 SwInject를 써봐야겠죠?

 

다음 !!!