<aside> 💡 Dependency Injector로 파이썬 애플리케이션에서 낮은 결합도, 높은 응집도를 가진 코드 만들기

</aside>

배경

최근 애플리케이션들의 설계에 대한 고민들을 많이하고 있다. 그 중에서 의존성에 대한 문제는 비단 특정 언어나 프레임워크, 또는 객체지향 프로그래밍에만 국한되는 게 아니다.

[우아한테크세미나] 190620 우아한객체지향 by 우아한형제들 개발실장 조영호님

조영호님: "설계에 대한 핵심은 의존성 "

요즘은 주로 쓰는 언어가 파이썬인데, 객체 지향 언어들과 달리 기존의 파이썬은 의존성 주입에 대한 논의가 부족했다 (pip package에 대한 디펜던시 관련 이야기가 대다수...) 혹자는 파이썬의 유연하며 컴파일되지 않는 언어적 특성상 파이썬 개발자들이 의존성 주입 프레임워크를 필요로 하지 않는 다고 말하지만, 여러 사람이 개발하는 프로젝트나 유지 보수성, 테스트 가능한 코드를 유지하는 데, 그리고 "성숙한" 코드를 만드는 데에는 효과적인 애플리케이션 내부의 의존성 관리가 필요하다고 생각한다.

Why is IoC / DI not common in Python?

관련한 stackoverflow의 질문/답변

파이썬에서 의존성을 관리하는 우아한 방법이 없을까? 라는 고민을 하다가 **dependency-injector**라는 라이브러리를 알게됐다. 덕분에 어디서 어떻게(HOW) 의존성을 주입해줄까에 대한 고민보다, 코드 레벨에서의 역할과 책임, 협력관계에 대한 설계에 좀 더 집중할 수 있게 되었다.

꼭 알아야할 개념들을 짚어보고, 다른 프레임워크나 라이브러리에서는 의존성 문제를 어떻게 해결하고 있는 지, 그리고 dependency-injector가 해주는 역할 및 기능에 대해서 정리를 해보려고 한다.


이 블록에서는 의존성과 관련한 (주로 객체지향 설계에서 다루는) 개념들을 되짚어보고, 왜 의존성 주입이 필요한지에 대해서 이야기 해보고자 한다. 해당 내용을 잘 알고 있고, 라이브러리 사용법에 대해서 알고 싶으면 다른 프레임워크에서의 DIDependency Injector 섹션으로 바로 넘어가도 좋다

의존성이란?

Dependency between two components is a measure of the probability that changes to one component could affect also the other

두 개의 컴포넌트 사이의 의존성이란 하나의 컴포넌트의 변경 사항이 다른 컴포넌트에도 영향을 미칠 가능성을 의미한다

출처: http://blog.rcard.in/programming/oop/software-engineering/2017/04/10/dependency-dot.html