본문 바로가기

개발/델파이

[10일차(1/10)] 델파이 컴포넌트 사용

컴포넌트 속성

Cation : 컴포넌트가 실제로 갖는 고유 이름 

Name : 컴포넌트가 실제로 갖느 ㄴ고유 이름

ParentFont : Parent라는 속성은 TContrl 컴포넌트에 있는 속성으로 어느 컴포넌트 위에 표시할 것인지 결정하는 속성


클래스 메소드(Class Method)

개체의 동작을 수행하기 위해서는 메소드가 필요하다. 

자동차를 예로들어보면, 자동차는 클래스가되고, 자동차를 구성하는 핸들, 엔진 바퀴는 개체라고 할 수있다.

이 때 자동차의 움직임인 '달리다', '핸들을 돌리다'등이 메소드이다.

클래스 메소드란 개체가 아닌 클래스 자체에 대하여 동작을 수행하는것

개체에 관한 메소드는 보이지 않는 파라미터인 self(C++의 this와 같은 역할)을 이용하여 개체 자신의 참조자를 전달한다.


예)

Test_btn := TButton.Creat(self);


예시에서의 Test_btn이 self라는 개체 자신의 참조자가 전달되어 생성된것을 의미한다.

그러나, 클래스메소드에는 개체가 없으므로 Self파라미터는 존재하지 않는다.

클래스 메소드란 개체가 아닌 클래스 자체에 대하여 동작을 수행하는것


클래스 프로퍼티

일반속성들은 개체 변수를 통해서만 액세스 할 수 있지만, 클래스 속성은 클래스 자체에 적용되는 프로퍼티를 말한다.

Strict Protected //클래스 프로퍼티를 액세스 하기 위해서는 정적 클래스로 선언되어야 한다.

class function GetX : Integer ; static ;

class Procedure SetX (val : Integer) ; static ;


public

class property X : Integer read GetX write SetX ; //클래스 프로퍼티 적용

class procedure StatProc (s : String) ; static ;

end ;


TMyClass . X := 17;

TMyClass. StatProc('Hello') ;


클래스 정적 메소드

클래스에 정적 메소드를 추가 할 수 있다.

Delphi 2007버전부터 추가된 기능

클래스 정적 메소드는 클래스 타입으로부터 호출할 수 있는 메소드

정적 클래스 메소드는 개체에 대한 참조없이도 사용이 가능

그러나 개체의 멤버들에 접근할 수 없으며, Self 파라미터와 가상 메소드인 virtual로 선언될 수도 없다.

다른 클래스 필드, 클래스 프로퍼티, 클래스 메소드와는 다른 차이점

클래스 정적 메소드는 매우 제한적으로 오직 class만이 접근이 가능하고 사용할 수있음.


type

TMyClass =class

strict private

class var

FX : Integer ;

strict protected    //클래스 프로퍼티를 액세스 하기 위해서는 정적 클래스로 선언되어야 한다.

class function GetX : Integer ; static ;

class procedure SetX (val : Integer) ; static ;

public

class property X : Integer read GetX write SetX ; //클래스 프로퍼티 적용

class procedure StatProc (s : String); static ;

end ;

TMyClass . X := 17;

TMyClass . StatProc('Hello') ;


클래스 변수

클래스 객체가 아닌 클래스 자체에 적용되는 변수를 말한다.


클래스 타입

해당 클래스 내에서만 사용이 가능한 타입 선언을 포함한다.

type

TClassWithClassType = class

private // private 선언

type

TRecordWithinAClass = record

somefield : strin;

end;

public     //public 선언

class var //클래스 변수 선언

RecordWithinAClass:TRecordWithAClass;

end;

. . .

procedure TForm1.FormCreate(Sender:TObject);

begin

TClassWithClassType.RecordWithinAClass.SomeField := '클래스 타입으로 선언된 필드';

ShowMessage(TClassWithClassType.RecordWithinAClass.SomeField);

end;


중첩된 클래스

클래스 선언 내에서 타입 선언이 포함될 수 있다.

방법을 이용하여 개념적으로 관계가 있는 타입들을 같이 둘 수 있으며, 이름 충돌도 피할 수 있다.


제네릭(Generics)

제네릭타입이라는 용어들은 타입으로 파라미터화 될 수 있는 기반내 것들의 집합을 설명함

제네릭은 프로시저나 함수 데이터 구조를 루틴이나 데이터 구조가 사용하는 하나 이상의 구체적인 타입으로부터 관계를 끓는 것을 허용하는 추상화 방법들의 집합

제네릭을 이용하면 명시적 타입을 일일히 명시하지 않고도 타입을 구체적으로 명시하지 않는 곳에 적용 됨

클래스에서 제네릭을 이용하는 예로는 리스트가 있다.

리스트 클래스의 코드를 작성하는 시점에서 리스트에 포함될 아이템들의 타입을 지정할 필요 없음


익명메소드(Anonymous Methods)

익명 메소드는 개발자들이 파라미터로 코드 블록을 전달할 수 있게 하는 코드구조

이름이 지정되지 않은 프로시저나 함수

익명 메소드는 코드 블록을 변수에 할당하거나 다른 메소드의 파라미터로 지정할 수 있음

익명메소드는 해다 ㅇ메소드가 정의된 컨텍스트에서 변수를 참조하고 값을 바인딩 할 수 있음

익명메소드의 핵심 기능은 익명메소드가 정의된 위치에서 보이는 변수들을 참조할 수 있다

이들 변수들은 익명 메소드에 대한 참조에 바인드되고 구속된다.

따라서 익명메소드는 상태를 캡쳐하고 변수명을 연장하게됨

  - 변수값들을 연결(bind)할 수있음

  - 메소드를 정의하고 사용하는 편리한 방법

  - 코드를 파라미터화 하는 것이 쉬움


폼도 클래스 이다.

모든 윈도우 어플리케이션은 한 개 이상의 윈도우를 갖는다.

델파이에서는 윈도우를 구현하기 위해서 폼이라는 요소를 제공하며, 이를 TForm이라고 하는 클래스를 통해서 구현된다.


1장에서 프로젝트 시작 시에 델파이는 항상 비어있는 폼 하나와 이폼의 소스코드인 유닛이 디폴트로 생성된다. 

이 때 델파이가 내부적으로 하는일은 폼의 클래스 타입을 선언하고, 새 폼의 객체를 만드는 코드를 자동으로 작성한다.


TForm 클래스로부터 상속을 받은 새로운 클래스 타입인 TForm1이 Type안에 선언되어 있다. 

새로운 클래스인 TForm1은 TForm클래로부터 상속받은 속성, 이벤트 메소드들을 가지고 있다.


Form1 : TForm1; // Form1이라는 이름을 갖는 TForm1 타입의 변수를 선언, 변수 Form1은 TForm1클래스 타입의실질적인 폼 개체를 할당 받음




'개발 > 델파이' 카테고리의 다른 글

[12일차[1/22]델파이  (0) 2019.01.12
[11일차(1/11)] 델파이 컴포넌트  (0) 2019.01.11
[9일차(1/9)] 델파이 클래스  (0) 2019.01.09
[8일차(1/8)] 델파이 문법  (0) 2019.01.08
[7일차[1/7] 델파이 책 시작!  (0) 2019.01.07