본문 바로가기

Delphi/문법58

델파이 코드구역(REGION) 사용방법 델파이 코드구역(REGION) 사용방법 {$REGION 'MyRegion'} procedure MyRegion1; begin end; procedure MyRegion2; begin end; {$ENDREGION} 2024. 4. 12.
상속(inheritance)과 연결(association) 상속(inheritance)과 연결(association) 객체지향에서 상속은 매우 막강한 개념이지만, 상속으로 모든 문제를 풀려하면 더 꼬이는 경우가 많이 발생한다. 상속의 가장 큰 단점은 클래스 관계를 복잡하게 만든다는 것이다. 여러 단계의 상속은, 이해하기도 힘들 뿐더러 수정도 쉽지 않다. 상속은 All or Nothing 개념이다. 이말인즉, 상속은 상위 클래스의 모든 기능을 하위 클래스로 전이 한다는 것이다. 이 때문에, 상위 클래스의 기능 중에서 어떤 기능을 제거하거나 추가하려면, 그 상위 클래스로 부터 상속받은 새로운 클래스를 만들고 그 기능을 override해야 한다는 문제점이 있다. 이 과정이 반복되면 쪼잔한 기능 때문에 수많은 클래스 계층 구조가 생기므로, 객체지향 고수들은 다른 방법을.. 2024. 4. 8.
델파이 추상화(abstraction) 델파이 추상화(abstraction) abstraction(추상화)라는 단어를 프로그래밍에 관한 책에서 한번쯤 들어봤을 것이다. 그런데, 대다수의 책이 이 단어의 의미를 매우 장황하고 어렵게 설명하기 때문에, 이해하기 어렵다. 추상화란 간단히 이야기하자면 다음과 같이 정의할 수 있다. 추상화(abstraction) "어떤 대상에 명칭(이름)을 부여하고, 그 대상의 성질을 파악하고 분류하려는 인간적 능력" 말이 어려운가? 달리 예를 들어 보자. "감정에는 아픔, 슬픔, 기쁨, 고통 등이 있다." 아픔, 슬픔, 기쁨, 고통은 실존하는 대상(물체)이 아니다. 그러나 우리 인간들은 이 실존하지 않는 애매한 개념에 이름을 붙이고 그것들을 분류하였다. 다시 말해서, 감정이란 대표 개념의 일부로서 아픔, 슬픔, 기쁨.. 2024. 3. 26.
델파이 메소드 포인터(Method Pointer) 델파이 메소드 포인터(Method Pointer) 프로시저 형 (Procedural Type) : C 언어의 함수 포인터와 유사한 개념. 정수나 문자열 변수 뿐 아니라 프로시저를 변수로 사용할 수 있다. type TestProc = procedure (var Param: Integer); 다음과 같이 선언된 프로시저 형의 변수 TestProc이 있다. 이것은 레퍼런스에 의해 전달되는 정수 파라미터의 프로시저 형의 변수를 뜻한다. 이 프로시저 형은 정확하게 같은 파라미터를 갖는 루틴이면 어느 것과도 호환이 된다. procedure DoubleProc (var Value: Integer); begin Value := Value * 2; end; procedure TripleProc (var Value: In.. 2023. 10. 24.
델파이 동적 2차원 배열 델파이 동적 2차원 배열 델파이 동적 2차원 배열 런타임 시에 크기를 조정할 수 있는 배열을 의미 2차원 배열을 저장할 변수를 선언합니다. 예를 들어, 다음과 같이 선언할 수 있다 var MyArray: array of array of Integer; 배열을 생성하려면 SetLength 함수를 사용한다. 예를 들어, 3x3 크기의 배열을 생성하려면 다음과 같이 할 수 있다 SetLength(MyArray, 3, 3); 배열에 접근하려면 행과 열 인덱스를 사용한다. 예를 들어, 배열의 원소에 접근하려면 다음과 같이 할 수 있다 MyArray[0][0] := 1; MyArray[0][1] := 2; MyArray[1][0] := 3; // 이런 식으로 계속해서 배열을 초기화할 수 있습니다. 배열 크기를 동적.. 2023. 9. 25.
델파이 Parameter 델파이 Parameter Parameter 일반적으로 함수나 메서드로 전달되는 값이라고 한다. 이것은 함수나 메서드가 실행될 때 필요한 정보를 전달하고 결과를 반환하는 데 사용되며, 파라미터는 함수나 메서드의 정의에 포함되며 해당 함수나 메서드를 호출할 때 전달해야 하는 값들을 명시적으로 지정한다. 파라미터는 함수나 메서드의 매개변수로도 알려져 있다. function myfunc ( a : String ; const b : String; var c : TButton; out d : integer; ) : integer; 1) 'a' : 아무 선언없이 쓰인 경우로 'a'는 function 내에서 선언된 local 변수처럼 사용된다. 2) const 'b' : function 내에서 b는 상수로 사용된다. .. 2023. 9. 22.
델파이 Application 델파이 Application TApplication TApplication type 으로, 프로그램 그 자신으로 생각할 수 있다. Delphi 어플리케이션의 주요 실행 및 관리를 담당합니다. Delphi는 GUI (그래픽 사용자 인터페이스) 기반 애플리케이션을 개발하기 위한 강력한 통합 개발 환경(IDE)이며, TApplication은 이 환경에서 GUI 애플리케이션을 작성할 때 핵심 역할을 한다. Dpr(프로젝트 파일) 과 개발환경 내 Project -> options -> Application에서 Title, Help File, Icon 등을 지정해 줄 수 있다. [일반사항] - 전체중 일부로 특정한 것만을 기록했다. Property - ExeName : String ; - 경로를 포함한 실행파일 명.. 2023. 9. 21.
델파이 Self 델파이 Self Self 일반적으로 method가 있는 object (예: Form에는 Create method가 있다)의 reference 이다. 객체 지향 프로그래밍에서 "self"는 주로 현재 객체(인스턴스)를 가리키는 특별한 키워드 또는 식별자이다. 일반적으로 method가 있는 object (예: Form에는 Create method가 있다)의 reference 이다. Delphi에서는 "self" 대신에 "Self"라는 예약어를 사용합니다. "Self"를 사용하여 현재 객체의 속성 및 메서드에 접근하거나 다른 객체와 구분하기 위해 사용됩니다. 예를 들면, Button1 := TButton.Create(Self); 위의 예와 같은 경우에 Self는 Button의 Owner인 Form을 가리킨다... 2023. 9. 20.
델파이 Owner 와 Parent 델파이 Owner 와 Parent 델파이 "Owner"와 "Parent"는 객체 지향 프로그래밍 개념 중에서 객체 간의 관계를 정의하는 데 사용되는 중요한 개념이다 Owner (소유자) "Owner"는 주로 컴포넌트와 관련이 있습니다. 컴포넌트는 Delphi 응용 프로그램에서 재사용 가능한 코드 조각을 나타내며, 시각적 또는 비시각적으로 폼 또는 다른 컴포넌트에 배치될 수 있다. Owner 컴포넌트는 다른 컴포넌트를 소유하고 관리하는 컴포넌트입니다. 예를 들어, 폼(Form)은 여러 컴포넌트를 소유하고 해당 컴포넌트들을 폼 위에 배치합니다. Owner-ownee(소유자-소유물) 관계에서, 소유자 컴포넌트가 소유물 컴포넌트의 생명주기를 관리하며, 소유물이 소유자를 참조할 수 있습니다. 주요 메서드와 속성 .. 2023. 9. 13.
델파이 포인터 (Pointer) 11편 델파이 포인터 (Pointer) 11편 데이터 좌표에 의한 수정 포인터 C/C++ int* pNum; // integer pointer char* pText; // char pointer .. *pNum = 123456; *pText = 'C'; Delphi pNum: ^integer; // integer pointer pText: ^Char; // char pointer ... pNum^ := 123456; pText^ := 'C'; 델파이와 포인터 델파이에선 C/C++ 과 달리 포인터 타입에 주의 하여야 합니다. C/C++ : 어떤 타입의 포인터이든 대입 가능 int* pNum; char* pText; ... pNum = pText; pText = pNum; Delphi : 다른 타입의 포인터를 대입.. 2023. 8. 24.
델파이 포인터 (Pointer) 10편 델파이 포인터 (Pointer) 10편 ShellApi 를 이용할때 윈도우에서 사용하는 언어인 'C' 와 델파이의 'Pascal'의 포인터 다루는 방법이 달라 많은 혼동(나만?)을 일으킵니다. 특히나 파스칼에서는 포인터방법이 여러가지가 있어 햇갈리기 아주 좋습니다. 해서 한번 정리하여 보았습니다. 예제는 폴더를 찾아 지정하는 SHBrowseForFolder 를 이용하는 것으로 하였습니다. 1. 버퍼를 이용하는 방법 var Buffer : array[0..255] of char; begin pszDisplayName:= @Buffer; ....... MessageBox(handle, Buffer, '', MB_OK); end; 2. pChar 를 이용하는 방법 : 'C' 와 유사하지요 var Buffer:.. 2023. 8. 23.
델파이 포인터 (Pointer) 9편 델파이 포인터 (Pointer) 9편 포인터의 이해 1 포인터를 쉽게 이해하기 위해선 어셈블러를 알고 있다면 금방알수 있습니다. 그렇지 않다면 메모리에 대한 계념 자체를 이해하고 있다고 해도 금방 알수가 있죠. 그러지 않다면 배열 에 대한 이해를 알고 있다면 도움이 됩니다. 메모리로 설명 하자면 (윈도우는 32 비트메모리를 쓰므로 32 트로 갑니당) 00000000 2023. 8. 22.
델파이 포인터 (Pointer) 8편 함수 포인터 unit MainFrm uses FrmInt type TFrmMain = class(TForm) private FWinForm: IWin32Form; .... implementation uses WinNTFrm, Win9xFrm; procedure TFrmMain.FormCreate(Sender: TObject); begin if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then FWinForm := TFrmWin9x.Create else if Win32Platform = VER_PLATFORM_WIN32_NT then FWinForm := TFrmWinNT.Create else raise Exception.Create('This application ca.. 2023. 8. 21.
델파이 포인터 (Pointer) 7편 델파이 포인터 (Pointer) 7편 procedure TForm1.MyProcedure; var AStr : ^string; begin AStr^ := 'SAMPLE'; ShowMessage(AStr^); end; 위의 예제는 AStr이 메모리에 할당되지 않아서 에러가 난다고했습니다. 그렇다면 메모리에 어떻게 할당을 해야 할까요? New라고 하는 함수(프로시져임)를 사용합니다. 델파이 New함수는 도움말을 보시면 아시겠지만 동적변수(포인터의 값을 의미)에 포인터를 할당하는 함수 입니다. 그러니까 위의 예제를 에러가 나지않도록 하려면 다음과 같이 한줄 추가 하면 되겠네요. procedure TForm1.MyProcedure; var AStr : ^string; begin New(AStr); { 2023. 8. 11.
델파이 포인터 (Pointer) 6편 델파이 포인터 (Pointer) 6편 기초 강좌 포인터란 무엇일까요? 포인터는 한마디로 가리킨다는 의미입니다. 쉽게 다음과 같은 예를 많이 들죠. 저도 포인터에 대한 상투적인 예를 간략히 들면 다음과 같습니다. 선생님께서 민영이네 집에 가정 방문을 가려고 합니다. 그런데 집의 위치를 잘 몰라서 민영이의 짝인 형철이에게 민 영의 집이 어딘지 물었습니다. 그러자 형철이는 '저기'라고 말하면서 손가락으로 민영의 집을 가리켰습니다. 자. 여기서 선생님은 민영의 집을 모르지만 민영의 집을 알고 있는 형철이를 알고 있습니다. 형철이는 민영의 집을 손가락으로가리키로 있는데 바로 형철이가 포인터인 셈입니다. 많은 사람들이 포인터를 이렇게 이해 시키더군요. 어쨌든 포인터의 개념은 이쯤하고 델파이에서 포인터를 사용하는 방.. 2023. 8. 10.
델파이 포인터 (Pointer) 5편 델파이 포인터 (Pointer) 5편 5. 변수의 주소 지정 변수를 어떤 특정 주소에 위치시키거나 또는 어느 주소를 특정 자료형 단위 (워드, 바이트)로 다루는 방법에 대해서 살펴보기로 한다. absolute 터보 파스칼에서는 메모리의 주소를 변수를 사용하여 선언할 때부터 지정할 수 있도록 하는 absolute 라는 예약어를 제공하고 있다. 다음의 선언문을 살펴보자. var Keyboard : Byte absolute $0000:$0417; 이와 같이 선언하면 Keyboard 라는 변수는 1바이트를 차지하는 변수로써, 그 위치는 세그먼트 $0000 에서 옵셋 $0417 에 위치하게 된다. 이 선언문은 다음과 같이 선언될 수 있다. var Keyboard : ^Byte; begin Keyboard := P.. 2023. 8. 9.
델파이 포인터 (Pointer) 4편 델파이 포인터 (Pointer) 4편 4. 포인터 관련 함수 지금까지 한 것만으로는 포인터 변수를 어디에 어떻게 쓰는지 상당히 궁금할 것이다. 포인터 변수의 실제 응용은 다음에 다루기로 하고 여기서는 일단 포인터 변수에 관련된 나머지 사항에 대해 좀 더 알아 보기로 하자. 물론 지금까지 이해한 것만으로도 동적 자료 구조를 대충 구현할 수 있지만, 이 절에서 설명하는 내용을 이해하면 프로그램을 작성할 때 도움이 많이 될 것이다. 이 절에서 설명할 내용은 좀 전문적이고 하드웨어나 어셈블리어에 대한 기초지식을 요구하므로, 필요하다면 어셈블러 서적을 참조해 가면서 보기 바란다. 1) IBM PC 의 메모리 구조 포인터 형은 메모리에 저장된 다른 자료가 있는 곳을 가리키는 형이다. 그런데 그 포인터 변수가 어디를.. 2023. 8. 8.
델파이 포인터 (Pointer) 3편 델파이 포인터 (Pointer) 3편 3. 포인터 변수에 대한 연산 포인터는 다른 변수를 가리키는 값이기 때문에, 포인터에 대한 연산은 일반 자료에 대한 연산과는 상당히 다르다. 이것을 이해하지 못하면 포인터를 이용하는 프로그램을 짤 수 없을 뿐더러 허투루 짰다가는 프로그램이 폭주하기 십상이다. 이 절에서는 포인터를 이용한 연산의 기본 개념을 잡아 보기로 한자. 포인터를 이용할 때는 항상 포인터가 가리키는 값과 포인터 그 자체를 구분하는 것이 매우 중요하다. 예를 들어 var p, q : ^Integer; 을 생각해 보자. New(p); New(q); p^ := 10; q^ := 20; 위 문장은 먼저 p 와 q 에 기억장소를 할당한다. 그런 다음 p 가 가리키는것 (p^) 에 10 을 지정하고, q 가.. 2023. 8. 7.
델파이 포인터 (Pointer) 2편 델파이 포인터 (Pointer) 2편 기억 장소의 할당과 해제 1) New 와 Dispose 첫번째에서는 포인터 변수를 선언하기만 하고 그것이 가리키는 것에 대해서는 따로 언급하지 않았다. 그래서 포인터 변수를 선언하면 자동으로 그것이 가리키는 것도 같이 생긴다고 생각하는 사람들이 있는데, 절대로 그렇지 않다. 첫번째에서 p 를 선언하고 곧장 p^ 를 썼지만, 실제로 그렇게 하면 십중팔구 시스템이 폭주할 것이다. 아까도 말했지만 포인터 변수는 다른 어떤 곳을 가리키는 값을 가진다. 포인터 변수를 처음 선언했을 때 그 값이 무엇인지 알 수 없다. 언뜻 생각하면 처음 선언했을 때 nil 이 될 것 같지만, 실제로는 어떤 값을 가지고 있으나 이보다 더욱 중요한 것은, 실제로 p 가 가리키는 것 (p^) 이 존.. 2023. 8. 4.
델파이 포인터 (Pointer) 1편 델파이 포인터 (Pointer) 1편 포인터형을 이용한 자료 구조를 흔히 동적 자료 구조하고 하는데, 이것은 정적인 자료 구조인 배열이나 레코드 등의 자료형의 크기가 컴파일 시에 이미 결정되어 할당되는데 비하여 포인터를 이용한 자료형은 프로그램의 수행 중에 크기를 바꿀 수 있기 때문에 붙여진 이름이다. 동적 자료 구조는 흔히 고급 프로그래밍 언어를 배우면서 자칫 넘지 못하는 장애물이다. 여기서는 포인터의 기본적인 개념과 간단한 응용 사례를 다룬다. 1. 포인터의 개념 1) 왜 동적인 자료 구조를 이용해야 하는가? 왜 동적인 자료 구조를 이용해야 하는가? 이에 대한 대답을 얻기 위해 리스서에 따라 늘어 놓은 것이다. 따라서 리스트는 다음과 같이 하나의 배열로 표현할 수 있을 것이다. var List : a.. 2023. 8. 3.