물론 델파이의 오브젝트 파스칼 언어에서도 원하시는 대로 코드로 이벤트 핸들러를 할당할 수 있습니다.
단지, MS 계열에선 폼 디자이너에서 할당한 이벤트나 속성도 모두 코드로 생성되는 대신, 델파이에서는 폼 디자이너에서 작업한 내용은 코드가 아닌 dfm 파일에 들어간다는 점만 다를 뿐입니다.
말씀하신 것처럼 dfm 자체는 정확하게 오브젝트 파스칼 언어는 아니지만, 그와 비슷한 스크립트라고 생각해도 무방합니다. 실제로, 폼 디자이너에서 컴포넌트 하나(혹은 여러개를 선택해도 마찬가지입니다)를 선택한 상태에서 컨트롤+C를 눌러 복사한 후, 텍스트 에디터 등에서 컨트롤+V로 붙여넣으면 dfm 파일에서 볼 수 있는 내용과 같은 형식이 나옵니다.
dfm 파일은 코드 자체에 넣는 MS의 방식보다 폼 디자이너의 반응 속도가 훨씬 빠릅니다. 또, dfm 파일은 기본적인 폼으로서 실행파일에 정적으로 포함되는 외에도, VCL의 여러 메소드를 이용하여 런타임에 불러들이는 고급 기법을 사용할 수도 있습니다. (조금은 어렵기도한 기법입니다만)
또 어떤 관점에서는, dfm 파일을 별도로 분리함으로써 순수 실행 코드인 pas 파일과 구분되는 프리젠테이션 레이어가 분리된다고 볼 수도 있습니다. 폼 디자인에 관계된 지저분한 내용이 코드 자체에 포함되지 않고 실행 코드만으로 pas 파일을 구성할 수 있으므로 유지보수가 좀 더 쉽고 또 코드를 해석하기도 좀 낫지요.
dfm 파일에 들어갈 모든 내용을 폼 클래스의 생성자나 OnCreate 등의 초기화 위치에서 코드로 넣어줘도 똑같은 결과는 나오지만, 폼 디자인시에는 나오지 않습니다. 그래서, 델파이에서는 폼 디자이너에서 작업하여 속성/이벤트들이 dfm에 저장되는 경우를 디자인타임, 또 코드를 이용해서 속성/이벤트가 할당되는 경우를 런타임이라고 생각하면 깔끔하게 구분이 됩니다. pas 소스 파일에서 속성/이벤트가 변경된 경우는 무조건 런타임 변경이므로, 이런 점만 이해하고 있다면 코드를 관리하거나 보기도 훨 쉬워지지요.
그렇지만, 역시 원론적으로 보자면, MS와 볼랜드가 IDE 환경에서 폼 디자이너에서 디자인한 내용을 어떻게 프로그램에 반영할 것인가를 선택한 방법의 차이이므로 큰 의미를 둘 필요까지는 없을 거 같습니다.
그럼...
벤허 님이 쓰신 글 :
: 다른 사이트에도 유사한 질문을 올렸는데요, 도저히 조급해서 기다리질 못하겠습니다.
: 전 델파이의 IDE 환경자체보다는 Object Pascal에 관심이 더많습니다.
:
: 델파이에서 버튼을 폼에 하나 만들고 클릭하면...
: 클래스에는
: Button1: TButton;
: procedure Button1Click(Sender: TObject);
:
: 그리고 프로시져는 다음과 같이...
: procedure TForm1.Button1Click(Sender: TObject);
: 생성이 되더군요.
:
: C#을 예로 든다면
: Button1.Click += new EventHandler( Button1Click );
: 와 같이 Click를 오버라이드 하죠..(보다정확히는 이벤트에 델리게이트를 연결해야 한다고 해야하나? ^^;)
:
: 전 Button에서 프로시져를 연결해주는 문장을 소스에서 찾아해매었습니다.
:
: 그런데 델파이 소스 어디를 보아도 이와 같은 문장을 발견할 수 없었습니다.
: 그런데 pascal소스라고 생각되지 않던 *.dfm에 서 다음과 같은 것을 발견했습니다.
: OnClick = Button1Click
: 근데 이게 외 DFM에 있는것인지..
: *.pas에 정의되고 구현되어 있어야 하는것 아닌가요?
: *.pas에서 OnClick = Button1Click 을 해줄수는 없는건가요?
: 아니면 *.DFM 역시 파스칼소스인데, IDE에서 프로퍼티만을 관리를 쉽게 하기위한 "분리된 파스칼소스" 인지
: 넘 궁금합니다.
:
: 친절한 답변 목빼고 기다리겠습니다.
|