StartprogrammingusingObjectPascal:Units
유닛
파스칼의 유닛은 수많은 프로그램에서 사용할 수 있는 프로시저, 함수, 상수, 사용자 정의 형식을 가진 라이브러리입니다.
unit은 다음 목적을 달성하기 위해 사용합니다
- 외부 유닛의 프로그램에서 자주 사용하는 프로시저나 함수를 쌓아놓습니다. 이는 소프트웨어 개발시 코드 재사용성을 충족합니다.
- 하나의 실체 안에서 제각각의 작업을 수행할 때 사용하는 프로시저나 함수를 모읍니다. 관련성 없는 프로시저들로 메인 프로그램의 소스 코드의 규모를 불리는 대신에, 유닛을 사용하여 논리적인 모듈로 프로그램을 나누는 것이 더 좋습니다.
새 유닛을 만들기 위해 라자루스 메뉴의 File/New Unit으로 이동하면, 라자루스는 다음과 같은 양식을 만듭니다.
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
implementation
end.
새 유닛을 만들고 나면, Test와 같은 정해진 이름을 사용하여 저장할 것입니다. 이 소스 코드를 Test.pas라는 이름의 파일로 저장할 것이지만, 유닛의 이름인 Test는 프로그램에 그대로 남게 될 것입니다.
이제 프로시저, 함수, 그리고 다른 재사용가능한 코드의 작성을 시작해볼 수 있습니다.
unit Test;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
const
GallonPrice = 6.5;
function GetKilometers(Payment, Consumption: Integer): Single;
implementation
function GetKilometers(Payment, Consumption: Integer): Single;
begin
Result:= (Payment / GallonPrice) * Consumption;
end;
end.
GallonPrice 상수와 다른 프로그램에서 호출할 GetKilometers 함수를 작성했습니다.
또한 유닛의 외부에서 접근 가능하도록 하기 위해 unit의 Interface 부분에 함수의 머리 부분을 넣었습니다. 이 유닛을 사용하려면, 유닛(Test.pas)과 같은 디렉터리에 새로운 프로그램을 만들고 uses절에 이 유닛을 추가합니다.
program PetrolConsumption;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, SysUtils
{ you can add units after this }, Test;
var
Payment: Integer;
Consumption: Integer;
Kilos: Single;
begin
Write('How much did you pay for your car''s petrol: ');
Readln(Payment);
Write('What is the consumption of your car (Kilos per one Gallon) ');
Readln(Consumption);
Kilos:= GetKilometers(Payment , Consumption);
Writeln('This petrol will keep your car running for: ',
Format('%0.1f', [Kilos]), ' Kilometers');
Write('Press enter');
Readln;
end.
GetKilometers 함수로 이동하려면, GetKilometers 함수의 소스 코드를 표시하기 위해 Ctrl 키를 누른 상태에서 마우스로 이 이름에 가져다가 누를 수 있습니다. 라자루스나 델파이는 Test 유닛을 바로 열고 해당 함수를 표시할 것입니다.
또한 유닛의 이름(Test)에 커서를 가져간 후 Alt + Enter를 눌러서 편집기에 Test 유닛을 열 수 있습니다.
다음과 같은 조건에서 프로그램에서 유닛에 접근할 수 있습니다.
- 앞의 예제에서 했던 프로그램과 같이, 같은 디렉터리 안에 유닛 파일이 존재할 때
- 라자루스에서 유닛을 열고 Project/Add Editor File to project 를 마우스로 눌러서 프로젝트에 유닛을 추가할 때
- Project/Compiler Options/Compiler Options/Paths/Other Unit Files 에서 유닛의 경로를 추가할 때