스택큐힙리스트

IoC / DI가 Python에서 일반적이지 않은 이유는 무엇인가요? 본문

카테고리 없음

IoC / DI가 Python에서 일반적이지 않은 이유는 무엇인가요?

스택큐힙리스트 2023. 4. 3. 08:55
반응형

자바에서는 Ioc(Inversion of Control)가 웹 어플리케이션, 대부분의 프레임워크, 그리고 Java EE에서 광범위하게 사용되는 일반적인 기법 중 하나입니다. 반면, 파이썬 웹 어플리케이션도 많이 있지만, Zope를 제외하고는 IoC가 파이썬 세계에서는 그리 흔하지 않은 것 같습니다. (잘못 알고 있다면 예시를 들어주세요.)

물론 Python을 위해 인기있는 Java IoC 프레임 워크의 여러 클론이 있습니다. 예를 들어 springpython가 있습니다. 그러나 그 중에서는 실제로 사용되는 것이 없는 것 같습니다. 적어도 저는 이와 같은 것을 사용하는 # $ ^ # * & * # $ & 또는 sqlalchemy +# $*^$!^^$& 기반의 웹 애플리케이션을 우연히 만난 적이 없습니다.

내 생각에 IoC는 합당한 장점을 가지고 있으며, 예를 들어 django-default-user-model을 쉽게 대체할 수 있습니다. 그러나 인터페이스 클래스와 IoC의 광범위한 사용은 Python에서 약간 이상하고 파이썬다운하지 않아 보입니다. 하지만 아마도 누군가는 Python에서 왜 IoC가 널리 사용되지 않는지 더 나은 설명을 가지고 있을지도 모릅니다.

답변 1

실제로 파이썬에서 DI/IoC가 드물다고 생각하지 않습니다. 그러나 드문 것은 DI/IoC 프레임워크/컨테이너입니다.

이것을 고민해보세요. DI 컨테이너가 하는 일은 무엇인가요? DI 컨테이너는 의존성 주입을 가능하게 해줍니다.

독립적인 구성 요소들을 함께 연결하여 완전한 어플리케이션을 만듭니다.

실행 중에.

우리는 연결과 런타임 중에 대한 이름을 갖고 있습니다.

스크립팅

동적인

그래서, DI 컨테이너는 동적 스크립팅 언어의 인터프리터에 불과합니다. 사실, 다시 말하자면: 전형적인 Java/.NET DI 컨테이너는 매우 나쁜 동적 스크립팅 언어의 구려한 해석기이며 때로는 XML 기반의 추잡한 구문을 가지고 있습니다.

파이썬으로 프로그램을 작성할 때, 아름다우면서도 훌륭한 스크립트 언어를 사용할 수 있는 데 왜 추한 나쁜 스크립트 언어를 사용하고 싶을까요? 실제로, 이것은 더 일반적인 질문입니다. 거의 모든 언어에서, Jython과 IronPython이 있는데 왜 추한 나쁜 스크립트 언어를 사용하고 싶을까요?

그러니 요약하자면: DI/IoC의 사용은 자바와 마찬가지로 파이썬에서도 중요합니다. 이것은 정확히 같은 이유 때문입니다. 그러나 DI/IoC의 구현은 언어에 내장되어 있으며 종종 매우 가볍기 때문에 완전히 사라집니다.

(안내 멘트: 어셈블리어에서 하위 루틴 호출은 상당히 중요한 일입니다. 로컬 변수와 레지스터를 메모리에 저장하고, 반환 주소를 어딘가에 저장하고, 호출하는 하위 루틴의 명령어 포인터를 변경하고, 하위 루틴이 완료되면 다시 호출하는 루틴으로 점프하도록 준비하고, 호출 대상이 인자를 찾을 수 있도록 인자를 보관하는 등의 작업을 수행해야 합니다. 즉, 어셈블리어에서 하위 루틴 호출은 디자인 패턴이며, Fortran과 같은 하위 루틴 호출이 내장된 언어가 등장하기 전에는 직접 하위 루틴 프레임워크를 만드는 일이 일반적이었습니다. 여러분은 하위 루틴 호출이 Python에서 드문 것으로 생각하시겠습니까? 하위 루틴 프레임워크를 사용하지 않기 때문에요.)

그래고 그것이 논리적 결론까지 이루어지는 모습을 보고 싶다면, #$^! &#^@$&의 #$^#! & * $& 에 대한 자료를 확인해 보세요.

Constructors Considered Harmful

Lethal Injection

A Ban on Imports ( continued ) : 이는 한국어로 번역 불가능한 형식의 문자로 보입니다.

답변 2

Python에서 IoC/DI 패턴이 왜 일반적이지 않을까요?

Python은 오랫동안 독특한 프로그래밍 스타일과 높은 생산성으로 유명해졌습니다. 하지만 이것은 창의적인 방식으로 개발 작업을 수행하도록 하는 것이지, 고수준의 소프트웨어 설계와 관련된 것은 아닙니다. 이것이 Python에서 IoC/DI 패턴이 일반적이지 않은 이유 중 하나입니다.

IoC/DI 패턴은 의존성 주입이라고도 합니다. 이는 클래스나 객체가 자신의 의존성을 가져오는 것이 아니라, 외부에서 이를 주입 받는 것을 의미합니다. 이렇게 하면 코드의 결합도를 낮출 수 있으므로 유지 보수 및 테스트가 더욱 쉬워집니다.

하지만 Python에서는 이러한 패턴을 적용하기가 어렵습니다. 이는 Python이 C++이나 Java와 같은 정적 타입 언어와 달리 동적 타입 언어로 분류되기 때문입니다. 이로 인해 Python에서는 객체의 타입이 런타임에 결정되므로, 의존성 주입의 이점을 쉽게 얻을 수 없습니다.

또한, Python에는 C++이나 Java와 같은 다른 언어에서 제공되는 강력한 종속성 주입 도구가 없습니다. 대신에 대부분의 의존성 주입은 작은 데코레이터 함수로 수동으로 처리되며, 이는 불편하고 실수가 발생하기 쉽습니다.

결국, Python에서 IoC/DI 패턴을 적용하는 것은 더욱 어렵습니다. 하지만 이 문제를 극복하기 위해 IoC/DI 패턴을 구현할 수 있는 몇 가지 라이브러리가 있습니다. 이러한 라이브러리는 Python 개발자들이 자신의 응용 프로그램에서 이 패턴을 사용할 수 있도록 도와줍니다.

따라서 Python에서 IoC/DI 패턴의 결합도를 낮출 수 있는 방법이 있음을 알아두세요. 하지만 Python의 동적 타입 언어 특성 때문에 이 패턴을 구현하는 것이 어렵다는 것을 명심하세요.

반응형
Comments