[TIL] 의존성 주입은 무엇인가?

7과11사이·2023년 9월 30일
0

스파르타코딩클럽

목록 보기
70/90
post-thumbnail

프로젝트 어플을 구현하면서 네이버 지도를 조금은 다루게 됐다.
그 와중에 Location Manager을 생성하게 됐는데, viewController에 모든 코드를 넣기 애매해지다보니 조금씩 MVVM 패턴을 따라봐야겠다는 생각을 하게 됐다.

그러면서 자연스럽게 Depedency Injection에 대해 공부를 하게 됐는데
관련해서 내용을 적어보고자 한다!


생각 정리

의존성 주입은 다른 클래스로부터 의존적이지 않도록 만드는 기술이라고 한다.
예를 들어 A라는 객체가 B라는 객체로부터 영향을 받는 상황을 "의존적 관계"라 칭하는데, B 객체의 프로퍼티 타입이나 명칭이 바뀔 경우, A 객체 또한 변경된 값을 넣어야 하는 상황을 뜻한다. 이때 의존성 주입을 하게 되면 이런 관계를 개선할 수 있다고 한다!

개인적으로 정말 쉽게 이해한다면, '한번 할 일을 두번하게 만드는 상황'이 의존적 관계이며 의존성 주입은 일을 한번만 할 수 있도록 만드는 것이라 생각한다.


그럼에도 여전히 어려워보이는 "의존성 주입" 이라는 표현 덕분에 MVVM 패턴에 대해 감을 잡고 있지 못하는데, 어느 글에서 "의존성 주입"을 포장하는 표현을 보고 조금은 안도를 느꼈다.

Dependency Injection is a 25 dollar term for a 5 cent concept

한 번 파헤쳐보자!


의존성 주입 기본 개념

의존성 주입은 사실 어떤 object에게 객체의 프로퍼티를 주는 것이 끝이다 고 표현한다.

실제로 의존성 주입을 초보 개발자로써 이미 여러번 사용했을 가능성이 높다고 하는데, 객체 속에 다른 프로퍼티를 담는 것이 아니라 생성된 객체의 프로퍼티를 담는 것이라고 한다.

예재 코드

import UIKit

class ViewController: UIViewController {
	var requestManager: RequestManager?
}

위 상황에서 requestManager?을 생성하는 방법은 2가지가 있다.

1. 의존성 주입 ❎

import UIKit

class ViewController: UIViewController {
	lazy var requestManager: RequestManager? = RequestManager()
}

2. 의존성 주입 ✅

import UIKit

// viewController을 생성시키고
let viewController = ViewController()

// 매니저를 configure
viewController.requestManager = RequestManager()

이 방식은 viewController가 더이상 requestManager이 언제 생성되는지, 어떤 특성을 가졌는지 몰라도 된다. (lazy 등)


의존성 주입의 장점

  • 객체에 의존성을 주입하면 클래스, 구조체가 가지는 역할이 더 명확해진다.
    위 상황처럼 requestManager을 viewController안에 주입하게 됨으로써, 1. viewController이 requestManager에 의존할 수 있다는 점과 2. viewController가 request를 관리하는 역할을 한다는 점을 파악할 수 있게 된다.

  • 더미 테스트를 하기 쉬워진다
    이 부분은 이해가 잘 안되는데, 더미 클래스를 새로 생성하여 의존성 주입을 대신 함으로써 데이터가 잘 주입되었는지 확인할 수 있다고 한다.



참고

0개의 댓글