프로젝트의 이해

프로젝트의 이해

별로 건드릴 필요가 없는 파일이더라도, 어떻게 프로젝트를 이루는 코드가 되어 있는지는 알아야 할 것이다. 
그렇다면, 프로젝트 파일의 소스 코드를 이해해 보도록 하자. 프로젝트 파일의 소스 코드를 보기 위해서는 
Project|View Source 명령을 선택하면 된다. Exam1.dpr 프로젝트의 소스 코드는 다음과 같다.

program Exam1;

uses

Forms,

U1_Exam1 in 'U1_Exam1.pas' {Form1};

{$R *.RES}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;

end.


- program 키워드
컴파일러에게 이 파일은 실행파일이 된다는 것을 알려준다. 
DLL이거나 유닛일 경우에는 library나 unit 키워드를 사용하게 된다.

- Uses 구문
Uses 구문은 델파이가 실행파일을 만들 때 링크할 오브젝트 파스칼 유닛 들을 나열할 때 사용한다.

- $R 지시자
$R 컴파일러 지시자는 컴파일러에게 지정된 윈도우 리소스를 사용하라고 알려주는 역할을 한다. 
$R 뒤에 나오는 별표(asterisk ‘*’)는 리소스 파일이 프로젝트와 같은 이름을 사용한다는 것을 나타낸다. 
프로젝트를 빌드하면 델파이는 프로젝트 자체와 각 폼에 대한 리소스 파일을 생성하게 된다.

- Application.CreateForm
Application.CreateForm 구문은 프로젝트의 폼을 메모리로 읽어들인다. 일반적으로 프로젝트의 모든 폼은 여기에 나열된다.
Option|Project 메뉴를 이용해 폼을 자동으로생성할 것인지 여부를 지정해줄 수 있는데, 각각의 폼은 각 폼의 인스턴스 변수
(예를 들어 Form1)에 저장되며 이들은 각 폼 유닛의 interface 섹션에 정의되어 있다. Application.CreateForm 구문은 지정된 
폼을 메모리로 읽어들이고, 인스턴스 변수에 그 폼에 대한 포인터를 저장한다.
프로젝트 파일에서의 Application.CreateForm 구문의 순서는 실제로 폼이 생성되는 순서이며, 첫번째로 생성되는 폼이 메인 
폼이 된다. 이 순서를 바꾸려면 Project|Option 메뉴의 Application 탭을 이용하면 된다.

- Application.Run
이 구문에 의해 애플리케이션이 동작하게 된다.



유닛 파일의 이해

델파이의 각 폼은 그에 해당한 유닛 파일을 하나씩 가지고 있다. 여기에는 폼의 모양을 나타내는 클래스 정의가 포함된다. 
새로운 컴포넌트를 폼에 추가할 때마다 델파이의 폼 디자이너는 이를 반영하기 위해 폼의 클래스 선언부분을 변경한다. 
또한, 이벤트 핸들러를 추가할 때마다 여기에 해당되는 코드가 유닛 파일에 저장된다.
유닛 파일은 기본적으로 interface, implementation, initialization, finalization 섹션으로 구분된다. 현재의 폼에 대한 유닛 
파일인 U1_Exam1.pas 파일의 소스 코드는 다음과 같다.

unit U1_Exam1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
btnOK: TButton;

private
{ Private declarations }

public
{ Public declarations }

end;

var
Form1: TForm1;

implementation
{$R *.DFM}

end.

- interface 섹션
여기에는 유닛의 헤더 정보가 기록된다. 즉, 각종 함수, 프로시져의 선언부와 유닛의 외부에서 접근할 수 있는 변수, 상수, 
타입의 정의가 위치하게 된다. 과거에 C를 써본 경험이 있는 사람이라면 이 부분의 C의 헤더 파일과 비슷한 역할을 한다고 
생각하면 된다. C와는 달리 이 섹션을 분리된 소스 코드 파일로 저장하지 않지만, 다른 모듈들이 이를 참조할 수 있다. 
컴파일된 유닛은 인터페이스 정보를 헤더 부분에 저장하기 때문에 다른 모듈이 Uses 구문을 이용해서 유닛을 참조하면 
델파이는 소스 코드를 직접 찾는 것이 아니라, 컴파일된 유닛(dcu 파일)의 헤더의 정보를 사용한다. 그렇기 때문에 델파이의 
유닛을 컴파일된 dcu 파일(오브젝트 코드)로 배포할 수 있는 것이다.

- implementation 섹션
implementation 섹션은 유닛의 실제 프로그래밍 코드가 담겨 있는 부분이다. 여기에 적힌 코드는 interface 섹션에서 나열된 
부분만 외부에서 볼 수 있게 되며, 보통은 interface 섹션에서 나열한 부분을 구현하는 코드가 존재한다.

1 2 3 4 5