class procedure TMis_MainDBserver.UpdateRegistry(Register: Boolean; const ClassID, ProgID: string);
begin
if Register then
begin
inherited UpdateRegistry(Register, ClassID, ProgID);
EnableWebTransport(ClassID);
RegisterPooled(ClassID, 1000, 10);
end else
begin
DisableWebTransport(ClassID);
unRegisterPooled(ClassID);
inherited UpdateRegistry(Register, ClassID, ProgID);
end;
end;
특정 오브젝트에 일반 메소드가 있다고 했을 때, 해당 메소드를 호출하기 위해서는 먼저 오브젝트를 인스턴스화 한 다음 사용하지만,
클래스 메소드로 선언한 경우, 오브젝트를 인스턴스화 하지 않고 바로 해당 메소드를 호출할 수 있다는 얘기입니다.
먼저 일반 메소드가 다음과 같이 선언되어 있다고 한다면,
<!--CodeS-->
TXXXObject = class(TXXobject)
public
procedure proc_XXXX;
end;
<!--CodeE-->
proc_XXXX를 호출하기 위해서는 다음과 같이 코딩하겠죠.
<!--CodeS-->
begin
......
XXXObject.proc_XXXX; //메소드 호출 : 이 때 XXXObject가 먼저 인스턴스화 되어 있지 않다면 에러가 발생합니다.
end;
<!--CodeE-->
그런데 다음과 같이 클래스 메소드로 선언한다면,
<!--CodeS-->
TXXXObject = class(TXXobject)
public
class procedure proc_XXXX;
end;
<!--CodeE-->
proc_XXXX를 호출하기 위해서는 다음과 같이 코딩할 수 있습니다.
<!--CodeS-->
begin
......
TXXXObject.proc_XXXX; //메소드 바로 호출 : proc_XXXX에서 알아서 처리하므로 XXXObject의 인스턴스 유무는 걱정하지 않아도 됩니다.
end;
<!--CodeE-->
ex. XXXObject -> 오브젝트, TXXXObject -> 클래스
이렇게 클래스 메소드는 오브젝트의 인스턴스에 관계없이 편하게 쓸 수 있지만,
그에 따라서 오브젝트의 인스턴스와 관련한 모든 상황을 클래스 메소드 내부에서 제대로 처리해줘야만 합니다.
물론, 일반 메소드일 경우 TXXXObject.proc_XXXX; 의 형태로 쓰면 컴파일이 안됩니다. ^^