위에 이미 TComponent와 string형 인자를 받는 Create 생성자가 있기 때문이다.
이로써 C++ 코드를 델파이로 포팅할 경우 발생할 수 있는 어지러운 상황들이 해
결되게 되었으며, 별로 대단한 것은 아니지만, 코딩시 그간 누락되었던 OOP의
주요 기법중 하나를 델파이상에서 누릴 수 있게 되었다.
델파이 4에 들어와 새로운 지시어인 overload가 등장했는데 이것이 메쏘드 오버
로딩을 위해 사용될 수 있다. 다른 인자를 가진 메쏘드들을 동일한 이름으로 구
성한다는 것이 메쏘드 오버로딩의 주된 의미다. 상속된 메쏘드는 그 부모의 것을
감추지 않더라도 새로운 인자를 가진 메쏘드로 오버로드될 수 있다. 메쏘드 호출
시 인자의 구성에 따라 적절한 메쏘드가 호출 되기 때문이다. 만약 가상 메쏘드
를 오버로드한다면, reintroduce 지시자를 이용해 오버로딩을 구성할 수 있다.
아래는 박후선님이 예전에 강의하신 내용중에 일부를 발췌한것입니다.
원하시는 의미를 찾으실 수 있을거 같습니다.
즐거운 프로그래밍 하세요~
-------------------------
○ 메쏘드 오버로딩
메쏘드 오버로딩이란 간단하다. 하나의 오브젝트 내에서 인자가 다른 경우 동일
한 이름의 메쏘드를 여러개 작성할 수 있는 것이다. 이것은 생성자, 소멸자 일반
메쏘드 모두에 공히 적용된다.
constructor Create(AOwner: TComponent); overload; override;
constructor Create(AOwner: TComponent; Text: string); overload;
하지만, 동일한 구조의 인자인데 인자명만 바꾸어 다른 함수로 지정하는 것은 상
식적으로 생각해봐도 의미 없는 일이며, 허용되지도 않는다.
constructor Create(AOwner: TComponent; Name: string); overload;
위에 이미 TComponent와 string형 인자를 받는 Create 생성자가 있기 때문이다.
이로써 C++ 코드를 델파이로 포팅할 경우 발생할 수 있는 어지러운 상황들이 해
결되게 되었으며, 별로 대단한 것은 아니지만, 코딩시 그간 누락되었던 OOP의
주요 기법중 하나를 델파이상에서 누릴 수 있게 되었다.
델파이 4에 들어와 새로운 지시어인 overload가 등장했는데 이것이 메쏘드 오버
로딩을 위해 사용될 수 있다. 다른 인자를 가진 메쏘드들을 동일한 이름으로 구
성한다는 것이 메쏘드 오버로딩의 주된 의미다. 상속된 메쏘드는 그 부모의 것을
감추지 않더라도 새로운 인자를 가진 메쏘드로 오버로드될 수 있다. 메쏘드 호출
시 인자의 구성에 따라 적절한 메쏘드가 호출 되기 때문이다. 만약 가상 메쏘드
를 오버로드한다면, reintroduce 지시자를 이용해 오버로딩을 구성할 수 있다.
type
T1 = class(TObject)
procedure Test(I: Integer); overload; virtual;
end;
T2 = class(T1)
procedure Test(S: string); reintroduce; overload;
end;
...
SomeObject := T2.Create;
SomeObject.Test('Hello!'); // calls T2.Test
SomeObject.Test(7); // calls T1.Test
기억해야 할 사항은 클래스의 내부에서 같은 이름으로 다중 오버로드된 메쏘드는
published의 멤버로 둘 수 없다. 런타임 타입 정보의 관리를 위해서는 각
published 멤버에 유일한 이름이 사용되어야 하기 때문이다.
type
TSomeClass = class
published
function Func(P: Integer): Integer;
function Func(P: Boolean): Integer // error
...
필자의 생각에, 대부분의 경우 published의 멤버로는 property가 올 것이므로 문
제는 없다고 여겨진다.