본문 바로가기

[Delphi | 델파이] Form 동적 생성 시 매개변수 Nil / Self / Application

폼의 생성자 constructor Create(AOwner: TComponent)에서 AOwner 매개변수는 T(Custom)Form 오브젝트의 Owner이다

 Owner는 에게 할당된 메모리를 해체하는 역할을 한다만약 Owner가 삭제되면 은 자동으로 삭제된다.

 

그렇다면 을 생성할 때 Owner로 무엇으로 지정해야 할까그 전에 Nil, Self, Application의 정의를 다시 한번 살펴보자.

 

Nil

Owner가 없음을 의미한다따라서 개발자가 생성한 폼에 대해서 반드시 메모리 해제를 직접 해주어야 한다.

      

Self           

메소드를 호출하는 오브젝트를 지칭한다예를 들어 MainForm에 있는 Button을 클릭할 때 MyForm이 생성되고               

           이 Form Owner Self라면  Self MainForm을 말하는 것이다따라서 MainForm의 메모리가 해제될 때 MyForm의 

           메모리도 자동으로 해제된다.


Application

실행되는 프로그램을 지칭한다.

 



1.     Modal Form


사용자가 폼을 닫으면 메모리가 해제되는 원리의 모달폼은 owner nil로 지정한다 

 

var

myForm : TMyForm

begin

myForm := TMyForm.Create(nil);

try

myForm.ShowModal;

finally

myForm.Free;

end;

end;



2.   Modaless Form


Application Owner로 지정할 수 있다.


var

myForm : TMyForm

           

              myForm := TMyForm.Create(Application);

 


만약 폼이 모달폼이고 종료 후 바로 삭제되는 것이라면 Nil로 지정한다. Application으로 지정하면 성능에 저하가 발생할 수 있다

만약 어플리케이션이 많은 개수의 폼과 컴포넌트를 이렇게 매번 Application을 Owner로 넘겨주는 것은 성능에 치명적인 영향을 

미친다대신 Nil을 이용하면 폼이 더 빠르게 생성되며 기능에는 전혀 영향을 받지 않는다.



그렇다면 Self는 언제 사용하는 것일까생성해야 하는 폼이 모달폼이 아니고 어플리케이션의 메인폼에서 생성되지 않는다면 

Self로 사용해도 된다. Self를 이용하면 Owner가 종료될 때 폼을 제거한다일반적으로 새로운 폼을 생성할 때는 Self를 이용하지 

않고 nil이나Application을 사용할 것을 권장한다그럼 ‘Self’는 언제 이용하는 것 인가새로이 폼이 생성자의 주체의 범위를 

벗어나지 못하도록 제한하고 싶을 때 사용한다.



출처: http://tenlie10.tistory.com/84?category=603842 [게임 개발자 블로그]