LazarusCompleteGuide:6.0
클래스 라이브러리
라자루스에서 프로그램을 개발 시에는 객체 지향 프로그래밍(OOP)을 사용한다. 애플리케이션의 GUI, 그 비즈니스 객체, 혹은 운영체제(OS)와의 상호작용을 설계할 때마다 항상 클래스 또는 객체를 이용할 것이다. 프로그래머가 사용할 수 있는 전체 클래스 영역은 3개의 구분된 그룹 또는 계층으로 조직된다.
- RTL
프리 파스칼 런타임 라이브러리(Free Pascal Run Time Library). OS와의 상호작용에 필요한 모든 함수를 포함한다. 플랫폼 특정적 및 플랫폼 독립적 유닛을 모두 포함한다. 일반적으로 RTL 유닛에서 찾을 수 있는 루틴은 객체 지향적이 아니라 절차적(procedural)이다. - FCL
프리 파스칼 프리 컴포넌트 라이브러리(Free Pascal Free Component Library). 다목적 크로스플랫폼 클래스와 컴포넌트의 집합이다: 이미지 처리, 프로세스 관리, 데이터베이스 접근, 웹 프로그래밍을 위한 컴포넌트. 델파이의 VCL과 달리 라자루스의 클래스는 비시각적 컴포넌트 집합과 시각적 클래스 집합이 엄격하게 구분되어 있다. FCL은 비시각적 클래스만 포함한다. - LCL
라자루스 컴포넌트 라이브러리(Lazarus Component Library). 라자루스의 모든 시각적 코드를 포함하는 라자루스의 GUI 계층(layer)이다. 해당 계층의 컴포넌트는 기본이 되는 위젯 셋을 끌어낸다. 따라서 동일한 컴포넌트 집합을 모든 플랫폼에서 사용할 수 있으며, 지원하는 모든 플랫폼에서 동일하게 작동하도록 만드는 것이야말로 라자루스 개발 팀의 목표이다.
위의 첫 두 계층은 라자루스의 기반이 되는 컴파일러인 프리 파스칼(Free Pascal)의 일부이다. 해당 계층 내 루틴은 라자루스 없이도 명령 행 컴파일러 혹은 다른 프리 파스칼 IDE(예: MSEide, fpGUI)를 통해 이용할 수 있다. 세 번째 계층 LCL 은 라자루스, 그리고 라자루스가 GUI programming 를 정의하는 방식에 한정된다. 라자루스의 목표 중 하나는 지원하는 위젯 셋을 모두 하나의 컴포넌트 집합으로 (LCL) 캡슐화하여, 다른 위젯 셋 유닛 집합을 이용하는 프로그램의 재컴파일만으로 다른 위젯 셋을 이용할 수 있도록 만드는 것이다.
지원하는 위젯 셋은 다음과 같다:
- Win32/Win64 API.
- Windows CE와 Windows Mobile API, Win32/Win64 API의 축소형태.
- 플랫폼 독립적 QT 4 위젯 셋. Windows, Linux/Unix, MacOS X에서 사용 가능하며, 라자루스에서도 지원된다.
- 오래된 GTK1 위젯 셋. 0.9.26 버전까지는 Linux/Unix에서 실행되는 라자루스에 기본 위젯 셋이었기 때문에 만족스럽게 지원된다.
- 새로운 GTK2 위젯 셋. 0.9.28 버전부터 Linux/Unix에서 실행되는 라자루스에 기본 위젯 셋이기 때문에 만족스럽게 지원된다.
- MacOS X에서 Carbon.
- 프리 파스칼은 MacOS X과 iPhone의 Cocoa 계층에 접근할 수 있다. LCL 은 최근 이 위젯 셋을 지원하지 않으므로 Cocoa 프로그램을 수동으로 작성해야 한다.
- fpGUI 는 프리 파스칼을 위한 대안 위젯 셋이다. fpGUI 위에 빌드되는 LCL 계층이 계획되었다.
라자루스는 무엇보다 Win32/Win64와 GTK1/GTK2 및 Qt 계층을 지원한다 (현재 베타 단계). 다른 위젯 셋은 알파 단계의 컴포넌트들이다.
RTL, FCL, LCL 간 구분, 그리고 다양한 위젯 셋들의 구별은 대개 학문적이라 최종 사용자인 애플리케이션 개발자에겐 실무적 중요도가 거의 없다.
오히려 시각적 클래스와 비시각적 컴포넌트를 구별하는 것이 더 중요한 문제다. 시각적 클래스 또는 컴포넌트는 실제 GUI 요소들이다: 폼, 버튼, 확인상자, 에디트 컴포넌트, 메뉴 등 사용자가 볼 수 있는 것은 모두 시각적 클래스이다. 라자루스에서 모든 시각적 클래스는 TControl (LCL 에서 정의됨)의 자손으로, 관련 내용은 아래에서 다루겠다. 라자루스 IDE의 컴포넌트 팔레트(Component Palette)에서 발견할 수 있는 컴포넌트 대부분은 시각적 컴포넌트이다.
반면, 비시각적 클래스나 컴포넌트는 애플리케이션의 사용자에게 보이지 않는 클래스로, 컴포넌트와 비컴포넌트(non-component)로 분류된다. 컴포넌트는 컴포넌트 팔레트에서 라자루스 폼으로 드롭(drop)할 수 있는 클래스이다. 드롭된 컴포넌트는 폼에 작은 아이콘으로 표시되어 프로그래머가 선택할 수 있고, IDE의 오브젝트 인스펙터(Object Inspector)를 통해 조작도 가능하다. 비컴포넌트 클래스는 프로그래머가 원하는 작업을 수행하도록 코드에 수동으로 구성하는 클래스이다.
모든 시각적 컨트롤은 LCL에서 정의된 기반 클래스인 TControl 에서 내려오기 때문에 모든 RTL 과 FCL 클래스는 정의상 비시각적이다. 그럼에도 불구하고 FCL의 컴포넌트 클래스 중에는 라자루스 폼으로 드롭할 수 있는 클래스가 상당히 많다. FCL에서 정의된 비시각적 컴포넌트의 예로 데이터베이스 컴포넌트를 들 수 있겠다.
시각적 컴포넌트는 다시 두 개의 범주, '일반(normal)' 컴포넌트와 DB-aware 컴포넌트로 분류되는데, 후자는 일반 컴포넌트의 자손이지만 데이터베이스 내 데이터로 연결하는 기능이 향상된 컴포넌트이다.
이는 데이터베이스 테이블 내 필드 내용을 표시할 수 있음을 의미하며, 사용자가 컨트롤을 조작할 때 (예: 텍스트 필드의 편집) DB-aware 컨트롤은 이러한 변경내용을 데이터베이스로 어떻게 전달하는지 알고 있다. DBedit의 경우, 데이터베이스 필드의 값은 새로 입력된 텍스트로 설정될 것이다. DB-aware 컨트롤은 Data Controls라는 이름의 자체 컴포넌트 팔레트 탭에 그룹화되어 있다. 주로 단순한 편에 속하는 GUI 컨트롤이다.