Class를 create, free에 대한 신경을 덜쓰면서 전역으로 쉽게 사용하기

printers unit의 내용을 확인해 보시면 아시겠지만, 재미 있는 방법으로 Class를 사용합니다.

Function과 Iniinitialization,Finalization 를 적절히 이용합니다.

결론은 클래스를 리턴하는 함수를 만들고 그함수안에서 클래스가 생성되어 있지 않으면 생성하는 방식입니다.

Finalization은 만들어진 Class를 프로그램이 종료될때 해제 하는방식이고요.

꽤 오래전부터 델파이 Printer를 사용하셨던 분들은 잘 아시는 방법이라 하겠습니다.

구현방법 1

unit Class_Public;

interface
uses Dialogs;

type
  TMyClass2 = class
    public
      procedure a;
  end;

Function MyClass2 : TMyClass2;

var
  FMyClass2 : TMyClass2;

implementation

Function MyClass2 : TMyClass2;
begin
  if FMyClass2 = nil then
    FMyClass2 := TMyClass2.Create;

  Result := FMyClass2;
end;

{ TMyClass }

procedure TMyClass2.a;
begin
  showmessage('aaa');
end;

initialization
  FMyClass2 := TMyClass2.Create;
finalization
  FMyClass2.Free;
end.

구현방법 2

unit Class_Public;

interface
uses Dialogs;

type
  TMyClass2 = class
    public
      procedure a;
  end;

Function MyClass2 : TMyClass2;

var
  FMyClass2 : TMyClass2;

implementation

Function MyClass2 : TMyClass2;
begin
  if FMyClass2 = nil then
    FMyClass2 := TMyClass2.Create;

  Result := FMyClass2;
end;

{ TMyClass }

procedure TMyClass2.a;
begin
  showmessage('aaa');
end;

initialization
finalization
  FMyClass2.Free;
end.

 

사용예제

MyClass2.A;
또는
fMyClass2.A;

너무 간단하여서 설명이 필요 없을것 같습니다.

Author: yyjksw