델파이 기초 다지기

프로시저와 함수

프로시저와 함수로 독립적인 문장블록을 만들고 반복 사용할 수 있습니다. 프로시저와 함수의 선언방법을 학습할 수 있습니다.

프로시저와 함수

독립적인 문장(프로그램 코드) 블록, 코드를 독립(분리)하고 재사용 가능

프로시저

procedure 프로시저이름(매개변수 목록);
{ 선언부 : 구현부에서 사용할 변수,상수,타입 지정 }
begin
  { 구현부 }
end;

porcedure TForm1.WriteLog(AValue: string);
var
  S: string;
begin
  S := FormatDateTime('HH:NN:SS', Now) + ' ' + AValue;
  Memo1.Lines.Add(S);
end;

begin...end 사이의 구현부 실행, 매개변수로 받은 데이터 사용 가능

구현부에서 사용할 변수(var), 상수(const), 타입(type) 선언부에 선언

다른 문장에서 프로시저 호출. 프로시저 이름과 매개변수로 전달할 데이터(매개변수와 같은 자료형) 사용

함수

function 함수이름(매개변수 목록): 반환값타입;
{ 선언부 }
begin
  { 구현부 }
  Result := 반환값;
end;

function Add(ANum1, ANum2: Integer): Integer;
var
  Sum: Integer;
begin
  Sum := ANum1 + ANum2;
  Result := Sum; // Add := Sum; 함수이름 변수 사용가능
  // Exit(Sum); // Exit 함수 사용시 문장을 빠져나감
end;

var
  Num: Integer;
begin
  Num := Add(10, 20);
  ShowMessage('10과 20을 더한 값 = ' + IntToStr(Num));
end;

구현부 문장 실행 후 Result 변수에 반환값 할당(함수이름 변수 사용 가능)

Result 대입 코드 후 다음 줄의 문장 실행 됨(빠져나가지 않음), Exit(반환값); 함수 사용 시 함수 빠져나감

매개변수(Parameter)

함수와 프로시저는 0개 이상의 매개변수 목록을 가진다. 여러개의 매개변수 사용 시 세미콜론(;)으로 구분. 같은 자료형 사용 시 쉼표로 구분 가능

procedure Test;
procedure TestStr(AStr: string);
procedure TestStrInt(AStr: string; AInt: Integer);
procedure TestInts(AInt1, AInt2: Integer);

매개변수의 전달방식

  • 값 매개변수(기본)
  • 변수(var) 매개변수
  • 상수(const) 매개변수
  • 출력(out) 매개변수
값 매개변수와 변수 매개변수

값 매개변수는 값에 의해 전달. 변수 매개변수는 참조에 의해 전달
(값 매개변수와 변수 매개변수를 가장 많이 사용)

function DoubleByVal(X: Integer): Integer;
begin 
  X := X * 2; 
  Result := X; 
end;
 
function DoubleByRef(var X: Integer): Integer;
begin 
  X := X * 2; 
  Result := X; 
end;

var 
  I, J, V, R: Integer; 
begin 
  I := 4; 
  J := 4; 
  V := DoubleByVal(I);    // V = 8, I = 4 
  R := DoubleByRef(J);    // R = 8, J = 8 
  
  R := DoubleByRef(4);    // 오류발생
end;
상수 매개변수

읽기 전용 값 매개변수. 값 매개변수와 비슷하지만, 컴파일러가 코드 최적화 가능

function DoubleByConst(const X: Integer): Integer;
begin
  // X := X * 2;    // 오류발생
  Result := X * 2;
end;
출력 매개변수

변수 매개변수와 같은 참조에 의해 전달. 참조되는 변수의 초기 값은 전달 시 버려짐

procedure DoubleByOut(X: Integer; out Value: Integer);
begin
  X := X * 2;
  Value := X;
end;
타입 미지정 매개변수

var, const, out 매개변수를 선언 시 타입 지정 생략 가능

procedure DoSomthingVar(var Value);
procedure DoSomthingConst(const Value);
procedure DoSomthingOut(out Value);

함수 내에서 매개변수 형변환 후 사용

배열 매개변수
procedure DoSomethingDynArray(Value: array of Integer);

type TNumbers = array[1..4] of Integer;
procedure DoSomethingArrayType(Value: TNumbers);
가변형(Variant) 배열 매개변수
procedure DoSomething(Value: array of const);

array of const로 지정 시 타입이 다른 배열을 매개변수로 전달 가능

매개변수 기본값 지정

매개변수 선언 시 기본값 지정 가능, 맨 뒤의 매개변수 부터 연속적으로 기본값 지정 가능

procedure StrDef(AStr: string = '');
procedure StrsDef(AStr1: string = 'a'; AStr2: string = 'b');

procedure IntDef(ANum: Integer = 0);
procedure IntsDef(ANum1: Integer; ANum2: Integer = 0);
procedure IntsDef(ANum1, ANum2: Integer = 0); // 오류발생

begin
  StrDef('안녕하세요.');
  StrDef;
end;

같은 이름의 함수(overload)

overload 지시어 사용 사용 시 같은 이름의 함수, 프로시저 사용 가능. 단, 매개변수 자료형이 달라야 함.

procedure WriteValue(AString: string); overload;
procedure WriteValue(ANumber: Integer); overload;
procedure WriteValue(AArray: array of string); overload;

댓글

댓글 본문
  1. dustin
    안녕하세요~ 델파이 공부중인데 도움 많이 되고 있습니다 감사합니다!
    프로시저 설명 부분의 7번째 줄에 porcedure라고 오타 있습니다. 수정 부탁드립니다.
버전 관리
험프리
현재 버전
선택 버전
graphittie 자세히 보기