Q&A

  • 'class procedure ...' 이게 무슨말이죠
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;
2  COMMENTS
  • Profile
    이희진 2007.01.25 00:49
    델파이에서 '클래스 메소드'라 함은 오브젝트 참조 대신 클래스 참조를 통해 동작하는 메소드를 말합니다.

    특정 오브젝트에 일반 메소드가 있다고 했을 때, 해당 메소드를 호출하기 위해서는 먼저 오브젝트를 인스턴스화 한 다음 사용하지만,

    클래스 메소드로 선언한 경우, 오브젝트를 인스턴스화 하지 않고 바로 해당 메소드를 호출할 수 있다는 얘기입니다.

    먼저 일반 메소드가 다음과 같이 선언되어 있다고 한다면,

    <!--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; 의 형태로 쓰면 컴파일이 안됩니다. ^^

  • Profile
    박성준 2007.01.25 02:16
    그냥 생각없이
    코딩하는 저에게 많은 반성이... ^^;;