반응형

오류 내용

ImportError: cannot import name 'X' from partially initialized module 'X' (most likely due to a circular import)

 

 

오류 원인

A파일에서 B클래스를 사용하기 위해 B파일을 호출했고, B파일에서 A클래스를 사용하기 위해 A파일을 호출했다.

A파일에서 B파일을 호출하고 B파일에서 A파일을 호출하니 순환호출이 되어 오류 발생

 

A클래스가 필요한 B클래스의 b함수 내부에 A파일을 호출하는 식으로 순환호출은 회피할 수 있는것 같다. 그러나 지저분해서 아키텍처를 순환호출하지 않는 방식으로 재설계하여 해결

 

 

순환호출을 왜 금지하는가?

A클래스에서 B클래스를 호출한다면 A클래스의 내용이 변경되더라도 B클래스를 수정할 필요는 없다. 그러나 A클래스에서 B클래스를 호출하면서 B클래스에서 A클래스를 호출한다면 두 클래스가 서로 의존관계이므로 A클래스의 내용이 변경될 때 B클래스의 내용도 수정되어야 한다. 요구사항 변경으로 인한 소스코드 변경은 필연적으로 발생하고, 그때 변경을 최소화 하기 위해 순환호출을 금지한다.

추가적인 내용은 acyclic dependencies principle 참고