티스토리 뷰
안녕하세요. 도미닉입니다.
오늘은 의존성 주입에 대해서 알아보겠습니다.
우선 의존성이 무엇인지에 대해 정리해보겠습니다.
의존성이란?
위 코드와 같이 Programmer 구조체에서 startProgramming 함수가 호출되기 위해서는 Coffee 구조체가 필요합니다.
이 때 Programmer 구조체는 ‘Coffee 객체에 의존성을 가진다’라고 합니다.
위 예제에서 Coffee 구조체의 drink 메소드가 없어지거나 drink 메소드의 내용이 바뀌면 그에 따라 Programmer 의 startProgramming 메소드가 변경되어야 합니다.
이럴 때 코드의 재활용성이 떨어지고 결합도가 올라가게 됩니다.
아래에서 의존성 뒤에 붙는 주입이라는 단어에 대해서 알아보겠습니다.
주입이란?
위에 코드를 보시면 Coffee 객체를 외부에서 생성해서 Programmer 객체가 생성될 때 넣어주고 있습니다.
객체를 외부에서 넣어주는 것을 주입이라고 합니다.
이렇게 주입만으로 의존성이 줄어들었다고 할 수 있을까요?
첫 예제 코드와 똑같이 Coffee 객체의 drink 메소드가 변경되거나 제거되면 Programmer 의 startProgramming 메소드는 영향을 받을 것입니다.
주입만으로는 아직 Programmer 객체의 Coffee 객체에 대한 의존성을 줄였다고 할 수 없습니다.
의존성 주입이란?
의존성 주입은 의존성을 분리시켜 사용합니다
위에 우리가 작성했던 코드들은 상위 계층(Programmer)이 하위 계층(Coffee) 에 의존하게 되는 상황이었습니다.
의존성 역전의 원칙을 사용해서 상위 계층인 Programmer가 하위 계층인 Coffee 로부터 독립하도록 변경해보겠습니다.
기존에는 Coffee 객체에 drink 가 없다면 Programmer 객체에서 오류 메시지가 발견됬을 것입니다.
이제 Coffee 프로토콜을 채택한 Americano 에 drink 메소드가 없다면 Americano를 선언할 때 에러가 발생하게 됩니다.
제어의 주체가 Programmer 에 있는 것이 아니라 Protocol(Coffee) 에게 있습니다.
에러 발생 시 Coffee 프로토콜만 파악하면 되니 분석이 수월해집니다.
이렇게 의존성이 분리되어 분석이 쉬워지는 것 말고도 의존성을 주입했을 때 아래와 같은 장점들이 있습니다.
의존성 주입의 장점
- 코드의 재사용성을 높여준다.
- Unit Test가 용이해진다.
- 객체 간의 의존성(종속성)을 줄이거나 없앨 수 있다.
- 객체 간의 결합도가 낮아지면서 유연한 코드를 작성할 수 있다.
- 코드가 단순화된다.
- 코드를 읽기 쉬워진다.
정리
의존성 주입은 모바일 개발에서 필수적인 요소인 것 같습니다.
저도 이번 기회에 확실히 정리하고 넘어갈 수 있었습니다.
글 읽어주셔서 감사합니다.
참고
https://velog.io/@wlsdud2194/what-is-di
https://medium.com/@jang.wangsu/di-dependency-injection-%EC%9D%B4%EB%9E%80-1b12fdefec4f
'IT > iOS' 카테고리의 다른 글
Human Interface Guidelines - Adaptivity and Layout 번역(1) (0) | 2022.05.15 |
---|---|
Bounds 와 Frame 의 차이점 (0) | 2021.12.09 |
애플 Human Interface Guidelines 에 대한 생각과 사례 조사 (0) | 2021.06.15 |
애플 Human Interface Guidelines iOS (2) User Interaction (0) | 2021.06.14 |
애플 Human Interface Guidelines iOS (1) App Architecture (0) | 2021.06.09 |
- Total
- Today
- Yesterday
- 뇌를 자극하는 C프로그래밍
- 단어
- 애플
- 데이터베이스
- Swift
- Xcode
- 포인터
- 매트랩
- terascan
- MySQL
- exercise
- 함수
- 반복문
- 시원스쿨
- Matlab
- 테라스캔
- 뇌를 자극하는 C 프로그래밍
- 프로그래밍
- IOS
- C
- 스위프트
- database
- 프로그램
- Apple
- 영어
- 형용사
- 왕초보 영단어1
- 연습문제
- 배열
- 리눅스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |