위 그림과 같이 A 클래스가 B 클래스를 접근할 수 있고, B 클래스가 A 클래스를 접근할 수 있는 구조를 Cyclic dependency 라고 한다.
Cyclic dependency 는 메모리 누수를 발생시킬 수 있고, 어떤 결과가 발생할 지 예측하기 힘들기 때문에 지양해야 하는 구조다.
위 그림처럼 B 클래스가 A 클래스를 직접 접근하지 않고, C 클래스를 통해서 접근해도 Cyclic dependency 가 발생한다.
위 그림처럼 A 클래스가 C 인터페이스를 구현하게 만들고, B 클래스에 C 인터페이스로 A 를 전달하면, B 클래스는 C 인터페이스에 구현된 기능만 사용할 수 있다. 이렇게 만들면 의도하지 않은 상황을 방지할 수 있고 추상화도 적용할 수 있다.