LazarusCompleteGuide:6.2

From 흡혈양파의 번역工房
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

FCL (프리 컴포넌트 라이브러리)

프리 컴포넌트 라이브러리는 라자루스 프로그래머가 사용할 수 있는 많은 클래스들을 포함하는데, 라자루스 IDE를 사용하지 않는 오브젝트 파스칼 프로그래머들도 이를 활용할 수 있다.


일반 클래스

FCL 내 모든 클래스는 비시각적 클래스이다. FCL 내의 클래스 대다수는 컴포넌트가 아니지만 (따라서 TForm 에 드롭할 수 없음) 프로그래머에 의해 생성 및 파괴된다. 오히려 이 클래스들은 직접적으로 GUI와 연관이 없는 다양한 일반 프로그래밍 작업을 처리하도록 설계된 유틸 성격의(utility) 클래스로 볼 수 있다. 아래 표는 선택된 클래스ㅡ어떤 것도 컴포넌트에 속하지 않는다ㅡ의 (완전하진 않지만) 리스트와 클래스가 구현된 유닛을 표시한다.


Name 프로퍼티에는 두 가지 중요한 제약이 있다:

  1. 유효한 파스칼 식별자여야 한다. 즉, 사용자는 오브젝트 인스펙터의 이름 필드에 무엇이든 입력할 수 없음을 의미한다.
  2. 유일해야 한다: TComponent 는 그것이 소유한 자식마다 반드시 유일한 이름을 가지도록 한다. 컴포넌트는 동일한 이름의 자식을 두 개 소유할 수 없다.


이 규칙에서 Name 프로퍼티는 예외로, 런타임 시 컴포넌트를 생성할 때 해당 프로퍼티를 비워둘(empty) 수 있다.


위 두 가지를 제약하는 이유는 무얼까? 대답은 TForm 선언에 나와 있다. 새 폼이 생성되고, 컴포넌트를 그 폼에 드롭하면 (TButton 컨트롤이라 치면 기본 값으로 Button1 이름이 붙여짐), 라자루스 IDE는 폼의 파스칼 파일에 아래와 같은 코드를 생성한다:

TForm1 = Class(TForm)
  Button1 : TButton
Private
 // private declarations go here
Public
 // public declarations go here.
end;


코드에서 볼 수 있듯이, 폼은 TForm 클래스의 자손으로 선언되고, 폼에 드롭된 버튼은 TButton 타입의 필드로 선언되며, 필드의 이름은 버튼 컴포넌트의 이름과 동일해진다. 컴포넌트의 이름이 변경되면 IDE는 폼 선언에 필드의 이름을 자동으로 변경할 것이다.


폼의 선언에 필드로 이용할 수 있는 버튼 컴포넌트가 있다면 아래와 같은 코드를 작성할 수 있기 때문에 매우 편리하다:

begin
  Button1.Caption := 'Press me';
end;


위의 경우가 아니라면, 폼의 자식 컴포넌트들 가운데 버튼을 검색하기 위한 코드를 작성해야 할 것이다:

  Var B : TButton;
begin
  B := FindComponent('Button1') as TButton;
  B.Caption := 'Press me';
end;

보다시피 더 복잡해진다.


폼에 드롭된 각 컴포넌트는 폼의 클래스 선언에서 필드로서 선언된다. 이는 TComponent 의 모든 자식들이 유일한 이름을 가져야 하는 이유를 설명한다: 바로 폼 인스턴스가 폼에 드롭된 필드로 정의된 모든 컴포넌트를 소유하기 때문이기도 하고, 각 폼 필드는 유일한 이름을 가지므로 TComponent 의 자식들도 (이번 경우 TForm) 유일한 이름을 가져야하기 때문이다.

클래스 유닛 용도
TASCII85DecoderStream ascii85 ASCII85 포맷으로 인코딩(encode)된 데이터를 디코딩(decode)하기.
TASCII85EncoderStream ascii85 ASCII85 포맷으로 데이터를 인코딩.
TAVLTree avl_tree AVL 트리 구현.
TBase64EncodingStream base64 Base64 (mime) 포맷으로 데이터 인코딩.
TBase64DecodingStream base64 Base64 (mime) 포맷으로부터 데이터 디코딩.
TBlowFishEncryptStream blowfish Blowfish cypher를 이용한 데이터 암호화(encrypting).
TBlowFishDeCryptStream blowfish Blowfish cypher를 이용한 데이터 복호화(decrypting).
TFPobjectList contnrs 객체 리스트 (앞서 언급한 TFPList는 포인터의 리스트).
TObjectList contnrs 리스트 변경 알림이 있는 객체의 리스트.
TComponentList contnrs TComponent의 리스트.
TClassList contnrs TClass 클래스 포인터의 리스트.
TStack contnrs 포인터의 스택.
TObjectStack contnrs 객체의 스택.
TQueue contnrs 포인터의 큐(queue).
TObjectQueue contnrs 객체의 큐.
TFPHashList contnrs 포인터를 데이터로 하는 해시(hash) 리스트.
TFPHashObjectList contnrs 객체를 데이터로 하는 해시 리스트.
TFPStringHashTable contnrs 문자열을 데이터로 하는 해시 리스트.
TFPObjectHashTable contnrs 객체를 데이터로 하는 해시 리스트.
TBucketList contnrs 포인터 데이터를 이용한 버킷 구현.
TObjectBucketList contnrs 객체 데이터를 이용한 버킷 구현.
TIDEAEncryptStream idea IDEA 포맷으로 데이터를 인코딩하기 위한 스트림.
TIDEADecryptStream idea IDEA 포맷으로 데이터를 디코딩하기 위한 스트림.
THashedStringList inifiles 빠른 검색을 위해 해시 리스트를 유지하는 TStrings 자손.
TIniFile inifiles .ini 파일 관리를 위한 클래스.
TIOStream iostream 표준 입/출력 파일 기술자(descriptor)를 나타내는 스트림.
TTarArchive libtar tar archive로부터 데이터를 읽기 위한 클래스.
TTarWriter libtar tar archive를 생성하기 위한 클래스.
TPropsStorage rttiutils RTTI 정보로 쉬운 접근과 클래스의 모든 published 정보를 .ini 파일로 저장하기 위한 클래스.
TSimpleEvent syncobjs 쓰레드 간 이벤트 동기화를 위한 클래스.
TCriticalSection syncobjs 임계 영역(Critical section)을 위한 클래스.
TXMLDocument dom XML 문서를 조작하기 위한 클래스.
TXMLWriter xmlwrite XML 파일을 쓰기 위한 클래스.
TXMLReader xmlread XML 파일을 읽기 위한 클래스.
TRegistry registry Windows 레지스트리로 접근하기 위한 클래스 (또는 다른 플랫폼에서 에뮬레이션).
TInputPipeStream pipes Pipe의 입력 끝.
TOutputPipeStream pipes Pipe의 출력 끝.
표 6.1: FLC의 클래스


비시각적 컴포넌트

FCL은 TComponent 자손인 비시각적 클래스도 일부 구현하므로 라자루스 컴포넌트 팔레트에서 이용할 수 있겠다:

클래스 유닛 목적
TProcess process 기타 애플리케이션을 실행 및 제어하기 위해.
TSimpleIPCClient simplepc 단순한 (한방향) 프로세스 간 통신 IPC 클래스.
TSimpleIPCServers implepc 단순한 (한방향) 프로세스 간 통신 IPC 서버.
TEventLog eventlog 시스템 로그 서비스로 접근을 제공한다.
표 6.2: FCL의 비시각적 컴포넌트


DB 클래스

FCL가 제공하는 컴포넌트 중 다수는 데이터베이스 연결 컴포넌트다. 그들은 자신만의 커다란 범주를 구성하므로 따로 구분되어 열거된다. 이러한 클래스들은 데이터베이스 연결 생성에 관한 장에서 논할 것이다. 이러한 클래스 대부분은 팔레트의 Data Access 탭과 SQLDB 탭에 표시된다. 개관을 요약하여 아래 표에 소개하겠다:

컴포넌트 유닛 목적
TDatasource db GUI 요소를 데이터베이스로 연결한다.
TSDFDataset sdf CSV 파일을 처리한다.
TFixedFormatDataset sdf 고정길이의 포맷 텍스트(formatted text) 파일을 처리한다.
TParadox paradox Paradox 파일을 처리한다.
TDBF dbf dBase(.dbf) 파일을 처리한다.
TMemDataset memdataset 인 메모리(in-memory) 데이터를 처리한다.
TSQLQuery sqldb 모든 SQL-데이터베이스 데이터셋.
TSQLTransaction sqldb SQL 기반의 데이터베이스를 위한 트랜잭션(transaction) 제어.
TSQLScript sqlscript 다중 SQL 문을 실행한다.
TPQConnection pqconnection PostgreSQL 에 대한 연결을 처리한다.
TIBConnection ibconnection Firebird/Interbase 에 대한 연결을 처리한다.
TOracleConnection oracleconnection Oracle 에 대한 연결을 처리한다.
TMySQL40Connection mysql40connection MySQL 4.0 에 대한 연결을 처리한다.
TMySQL41Connection mysql41connection MySQL 4.1 에 대한 연결을 처리한다.
TMySQL50Connection mysql50connection MySQL 5.0 에 대한 연결을 처리한다.
TODBCConnection odbcconnection ODBC를 이용하는 모든 데이터베이스로의 연결을 처리한다.
TSQLLite3Connection sqliteconnection SQLite 3.0 데이터베이스에 대한 연결을 처리한다.
표 6.3: 데이터베이스 컴포넌트