델파이의 기본적인 연산자와 키워드에 대한 정리이다.
@ : 주소값을 반환한다. (C언어의 &와 동일한 기능을 가짐)
^ : 포인터연산자 (C언어의 *와 동일함)
하지만 C언어와 다른 점이 있다면 그 위치에 따라 다른 역할을 한다.
^(자료형) 으로 포인터를 선언할 때 쓰이거나
(포인터변수)^ 로 포인터가 값에 접근할 때 쓰인다.
var aPName : ^String; aName : String; begin aName := '고현정'; aPName := @aName; aPName := aName^ + ' 예쁘다!'; end;
div : 정수형 변수를 나누고 몫을 반환함 ( / 기호는 사용할 수 없음)
mod : 나눈 값의 나머지를 반환함 ( % 기호는 사용할 수 없음)
and : 때에 따라 비트연산자와 논리연산자로 나뉨. 둘 다 참일 때만 참을 반환함 (1 : 참, 0 : 거짓)
in : 집합형 변수(세트형 변수)에 선언한 원소들 중에 속하는지 Boolean값은 판별할 때 쓰임
type TNumSet = set of 0..9; var aNumSet : TNumSet; aNum : Integer; begin aNum := 5; if aNum in aNumSet then Writeln('aNum은 5'); end;
is : 델파이엔 클래스가 존재한다. 그래서 조상의 개념이 존재하는데, is는 상속받고 있는지 판별하기 위한 키워드이다.
unit : 파일의 단위. 주로 파일명과 유닛명은 동일하다.
type : 정의 영역의 시작. 변수형, 클래스, 구조체 등을 선언함. 사용자 정의자료형을 정의한 뒤에 var영역에서 자료형을 사용할 수 있음
uses : C언어의 include와 동일한 역할을 하며, 사용할 리소스를 추가해준다.
implementation : 선언부와 실행코드의 경계선. 이것보다 위에 써있는 경우 다른 유닛에서도 사용이 가능한 public이 된다. 그렇기 때문에 이 위 쓰는 변수는 기본으로 자동생성되는 델파이 초기변수들 외엔 쓰지 않는다. 다른 유닛에서 사용하면서 오류가 날 가능성이 있기 때문이다.
const : 정적 변수를 선언해주는 것. 프로시저나 함수의 전달인자 부분에 쓰일 때가 있으며, 다음 포스팅에서 설명할 예정!
record : C언어의 struct와 같은 역할을 하며, 구조체를 선언하기 위해 쓰인다. 연속된 공간에 한 덩어리로 메모리가 할당된다.
type PExam = ^TExam; TExam = record iName : String; iNext : PExam; end;
procedure와 function : 리턴값이 있으면 function, 없으면 procedure이다. 리턴값의 경우 Result 키워드가 사용되며, 자료형을 function 이름 맨 마지막 부분에 정의해준 뒤에 Result에 리턴값을 넣어주면 된다. 전달인자의 경우 생략이 가능하며, 같은 자료형의 다른 변수는 ', (콤마)'로 구분하고 각 자료형 별로 '; (세미콜론)'으로 구분해준다. 당연히 Function의 리턴값은 한 개뿐이므로 자료형도 하나만 쓸 수 있다.
procedure ThisIsProc(aData : Integer; aName : String); begin // 내용 end; function ThisIsFunc(aData : Integer; aName : String) : String; begin // 내용 Result := '리턴값을 대입해준다'; end;
array : 정적 배열과 동적 배열로 나뉘며, 범위를 적어주지 않으면 동적array로 선언하는 것과 같다. 동적배열의 경우 SetLength로 메모리를 할당해준 뒤에 사용이 가능하다.
procedure ForStaticArray; var aStaticArray1 : array[1..10] of Integer; // 정수형 정적 배열 aStaticArray2 : array[15..25] of Integer; aStaticArray3 : array[1..5, 2..3] of Integer; // 정수형 정적 이차원 배열의 선언 1 aStaticArray4 : array[1..5] of array[2..3] of Integer; // 선언2 aStaticArray5 : array[1..5] of StaticArray1; // 선언3 i : Integer; begin aStaticArray1[1] := 1; // 인덱스로 직접 접근 index := 20; aStaticArray2[i] := 5; // 변수 index를 이용한 접근 aStaticArray3[1][2] := 10; // 인덱스로 이차원 배열의 원소에 접근 for i := Low(aStaticArray2) to High(aStaticArray2) do // Low와 High를 통한 접근 aStaticArray2[i] := i + 15; end; procedure ForDynamicArray; var aDynamicArray : array of Integer; // 동적배열 begin SetLength(aDynamicArray, 10); // SetLength를 이용해서 메모리 할당 aDynamicArray[5] := 10; // 메모리 할당 후 접근 end;
나열형 변수와 집합형(세트형) 변수 : 아래 예시를 통해 확인하자
procedure ForType; Type TDrinkKind = (DKCoke, DKSprite, DKFanta); TDrinkKindSet = Set of TDrinkKind; var aDrinkKind : TDrinkKind; aMyDrink : TDinkKindSet; aDrinkArray : array[TDrinkKind] of String; Feeling : String; begin aDrinkKind := DKCoke; //aDrinkKind := Coke; // 에러 aMyDrink := [DKFanta]; aDrinkArray[DKFanta] := 'Lee'; // 인덱스 대신 TDrinkKind의 원소로 인덱스 접근 if DKSprite in aMyDrink then // in <- 집합형에서 원소가 있는지 검사함 Feeling := 'Good'; end;
for문 : 다른 분기문, 반복문은 C언어와 유사한데, for문의 경우 downto가 존재한다는 차이점이 있다. 델파이의 for문은 안에서 i값(조건부분에 들어가는 변수)을 임의로 수정할 수가 없으며, 순차적으로 1씩 증감하는 것만 가능하다. 증가하는 경우 'for ~ to ~ do then'을, 감소하는 경우 'for ~ downto ~ do then'을 사용한다.
procedure Forfor; var i : Integer; TempArray : array[2..5] of Integer; begin for i := Low(TempArray) to High(TempArray) do begin if i mod 2 = 1 then continue; //홀수일 경우 건너뜀 TempArray[i] = i; end; for i := High(TempArray) downto Low(TempArray) do TempArray[i] = i; end;
if ~ else if ~ else : else문을 쓸 경우 if, else if문에서는 ; (세미콜론)을 사용하지 않으며, 사용하면 에러가 발생한다. 물론 begin ~ end 블록 안에서는 줄 마다 ; (세미콜론)을 써줘야 한다. 즉, if문 안에 한 문장이어서 블록 설정을 하지 않는 경우 ; (세미콜론)을 써주지 않는다.
if k < 3 then aYesOrNo := True // ; (세미콜론)을 써주지 않음 else if (k > 3) and (k < 10) then begin k := 1; // begin..end 블록 안이기 때문에 ; (세미콜론)을 써줘야 함 aYesOrNo := False; end else k := 11; end;
with : record나 class에서 사용되며, 유지보수가 쉽고 생략이 가능하다는 점에서 경제적인 코딩이 가능하므로 자주 쓰임
(아래의 두 코드는 같은 내용이다)
a : Tset; a.iData1 := 10; a.iData2 := 14;
a : Tset; with a do begin iData := 10; iData := 14; end;
프로시저와 함수의 전달인자에서 쓰이는 var, const의 의미
중구난방인 것 같지만 검색하는 사람들은 어차피 정독하러 오는 게 아니라 필요한 부분만 잘 읽고 갈 거라고 믿으며...
'노동자의 삶 > 델파이' 카테고리의 다른 글
델파이 예제(3) - 가변형 레코드 (0) | 2018.02.14 |
---|---|
델파이 예제(2) - Move를 이용한 구조체에 문자열 대입하기 (0) | 2018.02.14 |
윈도우 업데이트 후 델파이 실행오류 (0) | 2018.02.13 |
델파이 예제 (1) - 링크드리스트(Linked List) (0) | 2018.02.09 |
델파이의 시작 (0) | 2018.02.09 |