순환 의존성
Circular dependency![]() |
소프트웨어 공학에서 순환 의존성은 서로 직간접적으로 의존하는 두 개 이상의 모듈 간의 관계입니다.이러한 모듈은 상호 재귀라고도 합니다.
개요
순환 종속성은 동일한 도메인의 특정 개체가 [1]서로 종속되는 많은 도메인 모델에서 자연스러운 것입니다.단, 소프트웨어 설계에서는 큰 소프트웨어 모듈 간의 순환 의존성은 부정적인 영향을 [1]미치기 때문에 안티패턴으로 간주됩니다.그럼에도 불구하고 이러한 순환(또는 순환) 의존성은 실제 소프트웨어의 [2]소스 파일 간에 널리 퍼져 있는 것으로 밝혀졌다.그러나 상호 재귀 모듈은 유도 및 재귀 정의가 권장되는 함수 프로그래밍에서 다소 일반적입니다.
문제
순환 종속성은 소프트웨어 프로그램에 많은 원치 않는 영향을 미칠 수 있습니다.소프트웨어 설계의 관점에서 가장 문제가 되는 것은 상호의존적인 모듈의 긴밀한 결합으로 단일 모듈의 개별 재사용이 감소하거나 불가능하다는 것입니다.
순환 의존관계는 한 모듈의 작은 로컬 변경이 다른 모듈로 확산되어 원하지 않는 전역 효과(프로그램 오류, 컴파일 오류)가 있을 때 Domino 효과를 일으킬 수 있습니다.순환 의존관계는 무한 재귀 또는 기타 예기치 않은 장애를 초래할 수도 있습니다.
순환 의존관계는 특정 원시 자동 가비지 수집기(참조 카운트를 사용하는 자동 가비지 수집기)가 사용되지 않는 개체의 할당을 해제하지 못하도록 함으로써 메모리 누수를 일으킬 수도 있습니다.
원인과 해결책
매우 큰 소프트웨어 설계에서는 소프트웨어 엔지니어가 컨텍스트를 상실하고 순환 의존 관계가 잘못될 수 있습니다.소프트웨어를 분석하고 불필요한 순환 종속성을 [3]찾는 도구가 있습니다.
순환 의존관계는 콜백 기능을 실장할 때 도입할 수 있습니다.이는 옵저버 패턴과 같은 설계 패턴을 적용함으로써 피할 수 있습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ a b Lakos, John (1996-07-20). Large-Scale C++ Software Design (1st ed.). Boston: Addison-Wesley. ISBN 9780201633627.
- ^ Melton, Hayden; Tempero, Ewan (2007-01-12). "An empirical study of cycles among classes in Java". Empirical Software Engineering. 12 (4): 389–415. CiteSeerX 10.1.1.141.5362. doi:10.1007/s10664-006-9033-1. ISSN 1382-3256. S2CID 11134940.
- ^ Java용 JDepend