LazarusCompleteGuide:6.0

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.

클래스 라이브러리

라자루스에서 프로그램을 개발 시에는 객체 지향 프로그래밍(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 컨트롤이다.