델파이 프로그래밍

Hello, Delphi Programming

프로시저와 함수

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

프로시저와 함수

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

프로시저

1
2
3
4
5
6
7
8
9
10
11
12
13
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) 선언부에 선언

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

함수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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개 이상의 매개변수 목록을 가진다. 여러개의 매개변수 사용 시 세미콜론(;)으로 구분. 같은 자료형 사용 시 쉼표로 구분 가능

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

매개변수의 전달방식

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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;
상수 매개변수

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

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

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

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

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

1
2
3
procedure DoSomthingVar(var Value);
procedure DoSomthingConst(const Value);
procedure DoSomthingOut(out Value);

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

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

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

매개변수 기본값 지정

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

1
2
3
4
5
6
7
8
9
10
11
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 지시어 사용 사용 시 같은 이름의 함수, 프로시저 사용 가능. 단, 매개변수 자료형이 달라야 함.

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

댓글

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