Q&A

  • 클래스간 상호 참조
안녕하세요
컴포넌트 패키지 만드는 법을 공부하다보니
상호참조를 해서 엄청나게 꼬여버리는 현상이 발생했습니다.

상황 설명을 드리자면

유닛1

type
TMotherClass = Class
public
   myChildren: array of TChildClass;
end;


유닛2

type
TChildClass = Class
public
   myMother: TMotherClass;
end;

위 두개의 클래스는 상속은 받지 않았구요.
보시는 것처럼 서로를 참조하게 되어버렸습니다.
유닛은 따로 작성되어있기 때문에 서로 Uses에서 인클루드해야하는데
상호참조가 되어버려서 컴파일도 안됩니다. ㅠㅠ

그래서 생각해낸 것이 제삼의 유닛3이라는 것을 만들어 헤더 파일로 사용하는 것이었습니다.

유닛 3

type
TMotherClass = Class;
TChildClass = Class;

그런데 요것이 또 에러를 발생시켜버리네요.
선언이 아직 완료되지 않았다면서 진행을 하지 않네요.

어찌 좋은 방법이 없겠습니까?
많은 델피언분들의 조언을 구합니다.
2  COMMENTS
  • Profile
    최용일 2007.02.05 19:39
    안녕하세요. 최용일입니다.

    상호 참조는 하나의 유닛에서 구현하는것이 가장 좋은 방법입니다.

    굳이 두개의 유닛으로 분리하신다면 추상클래스를 이용하시면 됩니다.

    <!--CodeS-->
    유닛 1
    type
      TBaseClientClass = class(...)
        procedure AbstractMethod(...); virtual; abstract;
        ......; // TMotherClass에서 이용하는 추상 메소드들...
      end;

      TMotherClass = class(...)
      public
        myChildren: array of TBaesChildClass;
      end;

    implementation
      uses 유닛2;

    TMotherClass.CreateChildren;
    begin
        ......
        myChildren[x] := TClientClass.Create(...);
    end;

    유닛 2
    uses
      유닛 1;
    type
      TClientClass = class(TBaseClientClass)
        myMother: TMotherClass;
      end;
    <!--CodeE-->

  • Profile
    이성열 2007.02.05 22:25