본문 바로가기
Delphi/Delphi란?

Delphi란...{4}

by MonoSoft 2021. 4. 26.
728x90
반응형

Delphi란...{4}

 

델파이의 프로젝트

──────────────────────────────────

델파이로 프로그램을 작성할 때 프로젝트에 대한 이해는 필수적이다.

하나의 프로그램은 하나의 프로젝트로 구성된다. 한 프로젝트에는

한 개 이상의 폼과, 한 개 이상의 관련 파일들로 구성된다.

 

델파이로 새로운 프로그램을 작성할 때, 개발자는 비어 있는 프로젝

트로 시작하거나 이미 만들어져 있는 폼 양식(Template)이나 다른

프로그램의 프로젝트로 시작할 수 있다.

 

다음은 델파이 프로젝트를 구성하는 파일들이다.

 

* 프로젝트 파일 (.DPR)

* 유닛 파일 (.PAS)

* 폼 파일 (.DFM)

* 폼이 없는 소스 코드 파일

 

델파이를 처음 시작하면 이라 이름하는 다음과 같은 비어

있는 프로젝트가 열린다.

 

┌─┬───────────┬─┬─┐─┐

│==│ Form1 │▼│▲│ │

├─┴───────────┴─┴─┤ │

│ │ │

│ │ │

│ │ ├─ 폼

│ │ │

│ │ │

유닛 소스 │ │ │

코드 페이지 │ │ │

탭 (코드 ├─┬─────┬─────────┤─┘

에디터는 ───┼─┼─ Unit1 │ │

폼의 뒤에 │ └─────┘ │

있다) └─────────────────┘

 

처음의 빈 델파이 프로젝트에는 한 개의 유닛 파일(.PAS)과 한 개의

연관된 폼 파일(.DFM)이 들어 있다. 유닛 파일(.PAS)에는 폼에 관한

객체지향 파스칼 소스 코드가 들어 있고, 폼 파일(.DFM)에는 폼의

모양에 관한 내용이 2진 코드로 들어 있다. 이 두개의 파일이 폼을

구성하는 것이다.

프로젝트에 추가되는 모든 폼에는 이렇게 유닛 파일과 폼 파일이

있게 된다.

 

 

프로젝트 파일(.DPR)

──────────────────────────────────

델파이로 작성하는 모든 프로그램에는 한 개의 프로젝트 파일이

존재한다. 이 프로젝트 파일에는 프로그램을 구성하는 모든 유닛과

폼 파일들에 관한 정보가 저장된다.

 

새로운 프로젝트를 시작하면, 델파이는 프로젝트 파일을 생성하고

개발 과정에서 이 파일을 자동으로 유지시켜 준다. 처음에 프로젝트

파일에는 다음과 같은 사항들이 기록되어 있다.

 

* 기본적으로 정해지는 프로젝트 이름

기본적으로 'Project1'이라는 이름을 가진다. 개발자는 이 이름을

프로젝트를 저장할 때 변경시킬 수 있으며, 또한 어느 때에든지

메뉴의 < File/Save As >를 선택하여 이름을 바꿀 수 있다.

 

* 프로젝트 안에 들어 있는 유닛 파일들과 연관된 폼들을 열거하여

놓은 uses 구문.

 

* 프로그램을 실행시키고 메인 폼을 활성화시키는 소스 코드를 포함

한 구역.

 

개발자는 프로젝트 관리자(Project Manager)를 사용하여 프로젝트를

볼 수 있으며, 코드 에디터를 사용하여 프로젝트의 소스 코드를 볼

수도 있다.

 

 

.DPR 파일 보기

───────

개발자는 현재의 프로젝트에 들어 있는 유닛과 폼들을 알아보기 위하

여 .DPR 파일을 볼 수 있다. 델파이는 이 .DPR 파일을 자동으로 유지

시켜 주기 때문에 개발자가 직접 .DPR 파일을 수정할 필요가 없으며

또한 직접 수정하는 일은 하지 않는 것이 좋다.

 

=> .DPR 파일을 보기 위하여 다음과 같이 하라.

 

1. 메뉴의 < View/Units >를 선택하라.

그러면 < View Unit > 대화상자가 나타날 것이다. 거기에는 프로

젝트에 있는 유닛들과 하나의 프로젝트가 나타날 것이다.

 

2. 프로젝트 파일의 이름을 선택하고 < OK >를 선택하라.

그러면 다음과 같이 코드 에디터에 .DPR 파일이 나타날 것이다.

 

┌─┬──────────────────┬─┬─┐

│==│ PROJECT1.DPR │▼│▲│

├─┴──────────────────┴─┼─┤

│ │↑│

│ program Project1; ──┐ ├─┤ 프로젝트

│ └─────────┼─┼ 이름

│ uses ──────────────────┼─┼ uses구문

│ Forms, │ │

│ Unit1 in 'UNIT1.PAS' {Form1}; ─────┼─┼ 폼 식별자

│ │ │

│ {$R *.RES} ────────────────┼─┼ 컴파일

│ │ │ 지시자

│ begin │ │

│ Application.CreateForm(TForm1, Form1); │ │

│ Application.Run; │ │

│ end. ├─┤

│ │↓│

├────┬────┬───┬─┬─┬──┬─┼─┤

│1: 1 │Modified│Insert│←│ │ │→│ │

├────┴────┴───┴─┴─┴──┴─┴─┤

├┬───┬┐ ┌─────────────┤

││Unit1 ││Project1│ │

│└───┘└────┘ │

└────────────────────────┘

 

개발자가 프로젝트에 새 폼이나 유닛을 추가하면 델파이는 자동적

으로 .DPR 파일에 적절한 코드를 추가한다.

 

 

.DPR 파일의 uses 구문

───────────

델파이가 어떻게 프로젝트 파일을 자동적으로 유지시켜 주는지

간단하게 알아보자.

 

1. Project1의 프로젝트 파일을 보도록하라.

 

2. 메뉴의 < File/New Form >을 선택하고, 나타난 대화상자에서

< Blank Form >을 선택하라.

 

3. 코드 에디터에서 Project1 페이지 탭을 클릭하여 .DPR 파일을

보라. 그러면 다음과 같이 되어 있을 것이다.

 

┌─┬──────────────────┬─┬─┐

│==│ PROJECT1.DPR │▼│▲│

├─┴──────────────────┴─┼─┤

│ │↑│

│ program Project1; ├─┤

│ │ │

│ uses │ │

│ Forms, │ │

│ Unit1 in 'UNIT1.PAS' {Form1}; │ │

│ Unit2 in 'UNIT2.PAS' {Form2}; │ │

│ │ │ │ │ │

│ │ │ └───────┼─┼─새 폼

│ │ │ │ │ 식별자

│ │ │ │ │

│ │ └─────────────┼─┼─새 유닛

│ │ │ │ 파일 이름

│ │ │ │

│ └──────────────────┼─┼─새 유닛

│ {$R *.RES} │ │ 식별자

│ │ │

│ begin │ │

│ Application.CreateForm(TForm1, Form1); │ │

│ Application.CreateForm(TForm2, Form2); │ │

│ Application.Run; │ │

│ end. ├─┤

│ │↓│

├────┬────┬───┬─┬─┬──┬─┼─┤

│1: 1 │Modified│Insert│←│ │ │→│ │

├────┴────┴───┴─┴─┴──┴─┴─┤

├┬───┬┐ ┌┬───┬────────┤

││Unit1 ││Project1││Unit2 │ │

│└───┘└────┘└───┘ │

└────────────────────────┘

 

델파이가 자동적으로 새로운 유닛인 Unit2의 파일이름과 식별자를

추가한 것을 알 수 있다.

 

 

유닛 파일 (.PAS)

──────────────────────────────────

유닛 파일은 확장자가 .PAS로 저장되는 객체지향 파스칼 소스 코드

파일이다. 처음에 유닛 파일은 다음의 내용으로 구성되어 있다.

 

* 기본적인 유닛 이름

델파이는 기본적인 유닛 이름으로 Unit1, Unit2 등과 같은 이름을

부여한다. 이 이름은 개발자가 바꿀 수 있다. 바꾸는 방법은

프로젝트 파일을 저장할 때 이름을 바꾸어 저장할 수 있으며,

메뉴의 < File/Save As >를 선택하여 언제든지 바꿀 수 있다.

 

* interface 부분

interface 부분은 다음과 같은 것들로 구성되어 있다.

- uses 구문

- type 선언

- public 그리고 private 구역

- 폼의 인스턴스 변수의 선언

 

.DPR 파일에 있는 uses 구문처럼, .PAS 파일에 있는 uses 구문도

이 유닛이 접근가능한 모든 다른 유닛 파일을 기록하는 곳이다.

새로운 기본 유닛을 생성할 때마다 델파이는 자동적으로 uses구문

에 추가하여 준다.

 

* implementation 부분

이곳에서 부터 폼에 대한 소스 코드가 나타난다.

 

* 초기화 코드

 

 

.PAS 파일 보기

───────

개발자는 프로젝트에 포함되어 있는 유닛 소스 코드 파일을 코드

에디터의 원하는 페이지를 선택하여 볼 수 있다.

 

┌─┬──────────────────┬─┬─┐

│==│ UNIT1.PAS │▼│▲│

├─┴──────────────────┴─┼─┤

│ │↑│

│unit Unit1; ────────────────┼─┼─유닛식별자

│ │ │

│interface ─────────────────┼─┼─interface

│ │ │ 부분 시작

│ │ │

│uses ───────────────────┼─┼─uses구문

│ SysUtils, WinTypes, WinProcs, Messages, │ │

│ Classes, Graphics, Controls, Forms, │ │

│ Dialogs; ────────────────┼─┼─델파이

│ │ │ 라이브러리

│ │ │ 유닛

│type │ │

│ TForm1 = class(TForm) ─────────┼─┼─폼 type

│ private │ │ 선언

│ { Private declaration } │ │

│ public │ │

│ { Public declaration } │ │

│ end; │ │

│ │ │

│var │ │

│ Form1: TForm1; ─────────────┼─┼─폼 변수

│ │ │ 선언

│ │ │

│implementation ──────────────┼─┼─실행부분

│ │ │ 의 시작

│{$R *.DFM} │ │

│ │ │

│end. ├─┤

│ │↓│

├────┬────┬───┬─┬─┬──┬─┼─┤

│1: 1 │Modified│Insert│←│ │ │→│ │

├────┴────┴───┴─┴─┴──┴─┴─┤

├┐ ┌───────────────────┤

││Unit1 │ │

│└───┘ │

└────────────────────────┘

 

전술한 바와 같이 델파이는 uses 구문에 필요한 라이브러리 유닛을

자동으로 추가한다. 새로운 프로젝트를 생성하였다면, 다음과 같은

기본적인 uses 구문이 생성되어 있을 것이다.

 

uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics,

Controls, Forms, Dialogs;

 

만약 개발자가 폼에 GroupBox 컴포넌트를 추가하였다면, uses 구문

은 다음과 같이 자동으로 StdCtrls 유닛이 추가될 것이다.

 

uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics,

Controls, Forms, Dialogs, StdCtrls;

 

GroupBox 컴포넌트는 StdCtrls 라이브러리 유닛에 있는 것이기 때문

이다.

 

 

폼 파일 (.DFM)

──────────────────────────────────

폼 파일은 2진 파일이다. 그러므로 일반적으로 개발자가 수정할 수

있는 코드로 볼 수는 없다. 단지 개발자가 폼의 모양을 변경하고

컴포넌트를 추가하는 등의 일을 하면 변경된 내용이 폼 파일에 자동

적으로 저장된다.

 

그러나 개발자가 원한다면, 폼 파일을 코드 에디터에 열어서 보고 수

정할 수 있다.

 

 

.DFM 파일의 type 선언

───────────

델파이가 폼에 관한 인스턴스 변수를 자동으로 생성하는 것처럼, 폼

에 추가하는 컴포넌트에 관한 인스턴스 변수도 자동으로 생성하여 준

다. 이 경우에 컴포넌트에 대한 선언은 폼의 type 선언부에 나타난

다.

 

다음과 같이 Unit1 파일이 소스 에디터에 나타나게 하라.

그리고 Form1도 함께 보이도록 Form1의 위치를 이동시키든지 크기를

조정하여 보라.

 

┌─┬──────────────────┬─┬─┐

│==│ UNIT1.PAS │▼│▲│

├─┴──────────────────┴─┼─┤

│ │↑│

│unit Unit1; ├─┤

│ │ │

│interface ├─┤

│ │ │

│uses │ │

│ SysUtils, WinTypes, WinProcs, Messages, │ │

│ Classes, Graphics, Controls, Forms, │ │

│ Dialogs; │ │

│ │ │

│type │ │

│ TForm1 = class(TForm) ─────────┼─┼─폼의 type

│ private │ │ 선언

│ { Private declaration } │ │

│ public │ │

│ { Public declaration } │ │

│ end; │ │

│ │ │

│var │ │

│ Form1: TForm1; │ │

│ │ │

│implementation │ │

│ ├─┤

│ │↓│

├────┬────┬───┬─┬─┬──┬─┼─┤

│1: 1 │Modified│Insert│←│ │ │→│ │

├────┴────┴───┴─┴─┴──┴─┴─┤

├┐ ┌───────────────────┤

││Unit1 │ │

│└───┘ │

└────────────────────────┘

 

그리고 Form1에 Button 컴포넌트를 하나 추가하여 보라. 그러면 type

선언부에 다음과 같은 코드가 추가되어 있을 것이다.

 

┌─┬──────────────────┬─┬─┐

│==│ UNIT1.PAS │▼│▲│

├─┴──────────────────┴─┼─┤

│ │↑│

│unit Unit1; ├─┤

│ │ │

│interface ├─┤

│ │ │

│uses │ │

│ SysUtils, WinTypes, WinProcs, Messages, │ │

│ Classes, Graphics, Controls, Forms, │ │

│ Dialogs; │ │

│ │ │

│type │ │

│ TForm1 = class(TForm) │ │

Button1: TButton; ──────────┼─┼─델파이가

│ private │ │ 추가한

│ { Private declaration } │ │ Button1의

│ public │ │인스턴스변수

│ { Public declaration } │ │

│ end; │ │

│ │ │

│var │ │

│ Form1: TForm1; │ │

│ │ │

│implementation │ │

│ ├─┤

│ │↓│

├────┬────┬───┬─┬─┬──┬─┼─┤

│1: 1 │Modified│Insert│←│ │ │→│ │

├────┴────┴───┴─┴─┴──┴─┴─┤

├┐ ┌───────────────────┤

││Unit1 │ │

│└───┘ │

└────────────────────────┘

 

이번에는 Form1에서 Button 컴포넌트를 삭제하여 보라. 그러면 type

선언부에 있던 Button1: TButton; 문도 함께 사라질 것이다.

 

 

폼이 없는 소스 코드 유닛

──────────────────────────────────

비록 대부분의 델파이 유닛들이 폼과 연관되어 있지만, 폼과 관계없

는 유닛을 생성하기를 원할 수 있다. 예를 들어 개발자는 눈에 보이

지는 않지만 프로그램에서 중요한 역할을 하는 수학 함수등과 같은

루틴을 작성할 수 있다.

 

이렇게 개발자가 폼을 추가하지 않고 새로운 유닛만 추가하면 델파이

는 다음과 같은 기본적인 코드만 만들어 준다.

 

unit Unit2;

interface

implementation

end.

 

여기에 개발자가 원하는 코드를 써 주면 된다. 그러나 한가지 알아두

어어야 할 것은 이렇게 개발자가 유닛만 추가하였을 경우에는 델파이

가 자동으로 이 코드를 유지시켜 줄 수 없다는 것이다. 즉 이 코드에

대한 모든 추가, 변경 등의 일은 개발자가 직접해야 한다.

 

< 계속 >

728x90
반응형

'Delphi > Delphi란?' 카테고리의 다른 글

Delphi OOP와 C++과의 차이 [1]  (0) 2021.04.27
Delphi란...{6}  (0) 2021.04.26
Delphi란...{3}  (0) 2021.04.23
Delphi란...{2}  (0) 2021.04.23
Delphi란....  (0) 2021.04.22

댓글