C and C++

[C++] 순환참조(Circular Dependency) 제거하는 방법

개발새발 2020. 4. 12. 20:41
반응형

순환참조 발생 원인

1) header 파일에서 서로 include하는 경우

2) 서로 Dependency가 발생한 경우 

순환참조의 문제점

1번의 경우 서로가 서로의 헤더를 계속 포함시켜 컴파일 시 문제가 발생한다.

2번은 서로가 호출하는 경우로 모듈간의 커플링이 타이트해지는 문제점이 있다. 

 

해결방법

1) 전방 선언을 통한 헤더 구성

전방 선언을 통해 헤더의 include없이 포인터만으로 class를 선언 할 수 있다.

A.h

1
2
3
4
5
6
7
8
9
class B;//전방선언
 
class A {
public:
    A() {};
    void call(B* moduleB);
    void printA();
};
 
cs

b.h

1
2
3
4
5
6
7
8
class A;//전방선언
 
class B {
public:
    B() {}
    void call(A* moduleA);
    void printB();
};
cs

 

2) 인터페이스를 활용하여 느슨한 커플링을 만든다.

 

반응형