일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- stanford SwiftUI
- ARC
- SWIFT
- ReactiveX
- 스위프트
- ios
- Algorithm
- swift5
- swiftUI
- iOS SwiftUI
- string
- 머신러닝
- 애니메이션
- 스위프트UI
- 책 후기
- 책 추천
- objective-c
- 책
- objc
- wwdc
- 딥러닝
- 독서
- 알고리즘
- Animation
- 문자열
- Xcode
- Deep learning
- RX
- rxswift
- leetcode
- Today
- Total
THIS IS ELLIE
의존성 주입 Dependency Injection 본문
이전 포스트에서 Dependency Injection이
유닛 테스트에 왜 필요한지에 대해 포스팅했다면
오늘은 Dependency Injection이
무엇인지에 대해서 간단히 작성해보려 합니다
그래 Dependency Injection이 도대체 뭔데?
저도 처음 DI를 접했을 때 꽤 많이 혼란스러웠는데요
아직까지도 혼란스러울 수도?
응?
Dependency Injection에 대해서 찾아보면
의존관계 주입, 의존성 주입 등등 나오는데
그냥 영어 그대로 받아들여야 이해하기가 더 쉬운 것 같아요
Dependecy를 Inject 한다
???????????
그림으로 같이 봐요
A 객체 B 객체가 있다고 생각해 봅시다
A 객체 함수 내부에서 B 객체를 생성하면
아래와 같은 모습이 되겠죠
A 객체의 함수 내부에서 B 객체를 생성하지 않고
이 의존 관계를 뒤집어 봅시다
A 객체에 준비된 B 객체를 주입해 본다고 생각해 볼게요
그럼 아래와 같은 모습이 되겠죠
네 이게 Dependency Injection입니다
끝
은 아니고...
이전 포스트에 작성했던 내용을 잠시 들고 와볼게요
(아직 이전 포스트를 보지 않으셨다면 이전 포스트를 읽어보시길 추천드립니다)
자 아래 이미지를 보면
클래스 A에 있는 a 함수를 테스트하고 싶었으나
클래스 A에서 클래스 B를 생성해서 b 함수를 호출하기 때문에
클래스 B에 있는 b 함수가 실패하게 된다면
a 함수도 테스트 실패하게 되는 경우입니다
그리고 이 문제를 방지하기 위해
우리는 Dependency Injection을 사용합니다
fake, mock, dummy로 보장된? 옳은 결과를 가지는 클래스 B를 만들어
클래스 A에 주입한다고 하면 클래스 A의 a 함수는 다른 코드에 독립적인 거죠
즉 클래스 B의 b 함수는 클래스 A에 있는 a 함수를 테스트에 영향을 끼치지 않는 거죠
coupling은 객체들 간에 의존성을 뜻하는데요
Dependency Injection을 통해서
우리는 객체들 간에 의존성을 헐렁하게 만들었죠?
조금 어렵게 표현하면 loose coupling을 갖게 됩니다ㅇㅇ
마지막으로 정리할 겸
코드로 다시 볼게요
자 이게 원래 모습
A 클래스에서 B 객체 만들고 b 함수를 호출한다
여기서 Dependency Injection을 해보자
A 클래스에서 B 객체 만들고 가 아니라
준비된 B 객체를 A에 주입한다고 했죠?
위와 같이 첫 번째 init을 사용해서 주입해 줄 수도 있어요
두 번째 프로퍼티를 통해 주입해 줄 수도 있어요
생각보다 간단하...죠?
간단...한...가...?
'공부 > Unit Testing' 카테고리의 다른 글
XCTest를 사용해서 메모리 누수 감지하기 (0) | 2023.10.30 |
---|---|
유닛 테스트 Dependency Injection (0) | 2023.05.06 |
프로젝트에 유닛 테스트 번들 추가하기 Xcode (0) | 2023.03.05 |
iOS 유닛 테스트 시작하기 / 단위 테스트 (0) | 2023.03.04 |