java 에서 교차참조 해결하기...

exsider의 이미지

class A {
    B  b;
   void func1() {
        // 코드 생략
        b.func3();
   }
   void func2() {
       // 코드 생략 
   }
}

class B {
    A  a;
    void func3() {
        // 코드 생략
     }
    void func4() {
        // 코드 생략
         a.func2();
    }
}

위와 같이 클래스 두 개가 있는데 서로 참조를 합니다.
이 경우 A 나 B 클래스가 있는 파일을 컴파일하려고 하면 상대방의
정의를 찾을 수 없다며 에러가 납니다.

저는 두 클래스를 같은 파일에 정의하는 방법으로 해결했는데요,
뭔가 더 좋은 방법이 없을까요?

pool007의 이미지

가장 좋은 방법은 당연히 교차를 만들지 않는 것입니다.
이럴때 쓰는 패턴중의 하나가 Mediator 인데, Mediator는 중간에
중재자를 넣어서 그 중재자가 양쪽의 참조를 갖도록 합니다.

JAVA의 경우에는,
일단 A가 B를 필요로 하니까 껍데기 뿐인 B를 만듭니다.
그 뒤 B를 컴파일 합니다.
그리고 A를 컴파일 합니다. 이때 B가 있으니까 잘 될 것입니다.
그리고 B에 내용을 채워넣고 B를 컴파일합니다. 이때 A가 있으니까 역시 컴파일에 성공할 것입니다.

해결책은 이렇지만 바른 해결방법은 아닙니다.
상호 참조를 없애세요..

--
Passion is like genius; a miracle.

pool007의 이미지

여담인데 상호참조를 VS.NET에서 C#으로 만들어서 컴파일하면
한번에 잘됩니다. 자바랑은 상호참조 해결방식이 약간 다른가봐요.

--
Passion is like genius; a miracle.