본문 바로가기
프로그래밍/PC

Interface 요약 #6

by 사악신 2012. 4. 19.

지금으로부터 무려 10년전인 2002년 5월경, 델마당 개인게시판에 올렸던 총 9회의 글입니다. 유실된 줄 알았는데 싸이월드 게시판에 있는 걸 확인하고 복구합니다.;;

 

 

 

9. 클래스 내(內) 다중 인터페이스 구현

  • Object Pascal의 경우 C++ 과 같은 클래스의 다중상속은 지원하지 않는다.(다중상속 시 조상 메쏘드의 이름이 중복될 경우 애매한 상황이 연출되는 등의 문제가 있다.)
  • 다중 인터페이스의 구현은 다음과 같다.
type
  TMyMultiplyInterfacedClass = class(TInterfacedObject, IInterface1, IInterface2)
  • 다중 인터페이스는 다중 상속과는 다르다.(상기 클래스의 조상 클래스는 TInterfacedObject 뿐이다.)
type
  IInterface1 = interface
    procedure DoIt;
  end;

  IInterface2 = interface
    procedure DoIt;
  end;
  • 만약, 상기 인터페이스를 다중 인터페이스로 사용하는 클래스가 있는 경우 동일한 이름으로 정의된 메쏘드(DoIt)가 실제 동일한 메쏘드라면 델파이는 같은 메쏘드로 처리를한다.
  • 만약, 이름만 같은 서로 다른 메쏘드라면 다음과 같이 수정해주어야한다.(이것을 메쏘드 재정의라고 한다)
type
  TMyObject = class(TInterfacedObject, IInterface1, IInterface2)
    procedure IInterface1.DoIt = DoIt1;
    procedure IInterface2.DoIt = DoIt2;

    procedure DoIt1;
    procedure DoIt2;
  end;


var
  MyInt1: IInterface1;
begin
  MyInt1:= TMyObject.Create;
  MyInt1.DoIt; // - 1
end;

 

  • 1은 TMyObject.DoIt1 을 호출한 것과 동일하다.
type
  TMyObject = class(TInterfacedObject, IInterface1, IInterface2)
    procedure IInterface2.DoIt = DoIt2;

    procedure DoIt;
    procedure DoIt2;
  end;
  • 모든 메쏘드에 대해 재정의하지 않고 상기와 같이 하여도 동일한 결과를 얻을 수있다.

 

 

반응형

'프로그래밍 > PC' 카테고리의 다른 글

Delphi XE2, dbExpress Oracle 10g 연동  (1) 2012.05.30
Interface 요약 #7  (0) 2012.04.19
Interface 요약 #5  (0) 2012.04.19
Interface 요약 #4  (0) 2012.04.19
Interface 요약 #3  (0) 2012.04.19

댓글