circular dependency 가 안좋은 이유?

About_work·2024년 7월 1일
0

python 기초

목록 보기
57/65
  • 순환 의존성(circular dependency)은 두 모듈이나 더 많은 모듈이 서로를 직접적이거나 간접적으로 의존하는 상황

문제점

    1. 유지 보수의 어려움:
    • 순환 의존성은 코드의 이해를 어렵게 만들고, 따라서 유지 보수를 더 복잡하게 만듭니다.
    • 변경 사항이 하나의 모듈에 영향을 미치면, 이는 연쇄적으로 다른 모듈에도 영향을 미칠 수 있음
    1. 초기화 문제:
    • 파이썬에서 모듈은 처음 임포트될 때 초기화되며, 순환 의존성이 있는 경우 무한 임포트 루프에 빠지거나 초기화 순서 문제로 인해 런타임 오류가 발생할 수 있습니다.
    1. 테스트와 디버깅의 어려움:
    • 모듈 간의 강한 결합은 각 모듈을 독립적으로 테스트하기 어렵게 만듭니다.
    • 이는 또한 버그를 찾고 수정하는 과정을 더 어렵게 만듭니다.

예시

다음은 파이썬에서 간단한 순환 의존성의 예시입니다.

module_a.py

from module_b import feature_b

def feature_a():
    print("Feature A")
    feature_b()

module_b.py

from module_a import feature_a

def feature_b():
    print("Feature B")
    feature_a()  # 이 호출은 순환 의존성을 만듭니다.

이 코드를 실행하려고 할 때, Python은 module_a를 임포트하고 이 모듈은 module_b를 임포트합니다. 그러나 module_b는 다시 module_a를 임포트하려고 시도하면서 순환 의존성이 생깁니다. 이는 파이썬 인터프리터에서 "ImportError: cannot import name 'feature_a' from partially initialized module 'module_a'" 같은 오류를 발생시킬 수 있습니다.

해결 방법

    1. 구조 재설계:
    • 모듈 간의 의존성을 제거하거나, 공통 기능을 별도의 모듈로 분리하여 모듈 간의 의존성을 줄입니다.
    1. 지연된 임포트 사용:
    • 함수 내에서 필요할 때 임포트를 실행하여 초기화 문제를 피할 수 있습니다.
    • 하지만 이 방법은 근본적인 문제의 해결은 아니며, 단지 순환 의존성 문제를 회피하는 임시적인 해결책에 불과합니다.

  • 순환 의존성은 근본적으로 설계 문제이기 때문에, 가장 좋은 해결책은 종종 코드 구조를 재검토하고 개선하는 것
profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글