Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 강좌/문서
Delphi Programming Tutorial&Documents
[18] 어플리케이션 프레임웍 만들기
주정섭 [jjsverylong] 6285 읽음    2003-05-06 10:21
오랫동안 델파이로 코딩을 해 왔지만, 델파이로 이런것도 가능하구나하는 것을 종종 발견할 때가 있습니다. 이 간단한 어플리케이션 라이브러리를 만들면서 그런 느낌을 새삼 가집니다.

어플리케이션 프레임웍이란 프로그램 만드는 과정을 단순화하기 위한 라이브러리입니다. 델파이의 VCL이나 Visual C++의 MFC같은 것이 어플리케이션 프레임웍의 일종이라고 할 수 있습니다. 즉 어플리케이션 프레임웍이란, 컴언어 자체의 표준 라이브러리 이외에, 개발 과정을 빠르게하기 위해 만든 라이브러리들의 집합체 입니다.

델파이에는 VCL이라는 막강한 클래스 라이브러리 때문에 프로그램을 비교적 쉽게 만들 수 있습니다만, VCL을 사용한다고 해도, 반복되는 코딩 과정은 항상 있게 마련입니다. 이 때문에 나만의 어플리케이션 프레임웍을 만들 필요가 있습니다. 대부분의 개발자들은 자신의 개발 분야에서 반복되는 코딩이 항상 있기 때문입니다. 저 또한 마찬가지입니다.

프로그램을 만들 때 가장 많이 반복되는 코드의 한 종류로, 메인 폼에서 하위 폼 처리 관련 루틴입니다. 보통 메인폼에는 메인메뉴와 툴버튼들이 있고, 메인메뉴와 툴버튼의 onClick 이벤트에는 하위 폼들을 생성(Create)하여 사용자에게 보여주는 코드를 삽입하기 마련입니다. 일반적인 프로그램의 경우, 메인폼에서 호출되는 하위 폼들의 수는 10-20개 정도가 될 것입니다. 방대한 프로그램은 100개가 넘는 경우도 있습니다.

그런데 하위 폼을 하나 만들어서 메인 메뉴에 하위 폼 생성 코드를 추가하려할 때 마다, 매우 귀찮은 다음과 같은 작업들을 반복해야 합니다.

1. 메인 폼 소스(유닛)의 uses 문에 하위 폼 소스 명을 추가한다.
2. 메인 폼의 메인 메뉴에 메뉴 항목을 추가한다.
3. 추가된 메뉴 항목의 onClick 이벤트에 방금 만든 하위 폼 생성 코드를 삽입한다.
4. 이 작업폼이 빈번하게 사용된다면 툴버튼을 추가한다. 이 툴버튼에 동일한 하위 폼을 생성 코드를 삽입한다.

외부 명칭(함수, 전역변수, 클래스)을 참조하려면 1과정의 uses문 추가는 당연한 것이기에, 대부분의 메인폼 소스 파일을 보면 엄청나게 긴 uses문이 있습니다. 하위 폼을 하나 만들 때마다 이런 작업을 반복해야 한다면 엄청 귀찮은 일입니다. 더욱이 몇십개의 하위 폼을 만들어야 하는 프로그램이라면 이 반복작업은 상당히 지겨울 뿐만 아니라, 유지보수에도 아주 골머리 아픕니다. 그래서 어떻게 하면 이 과정을 자동화 할 수 없을까 연구를 해 봤습니다. 이로 인해 만든 것이 이 어플리케이션 프레임웍 예제입니다.

이 예제들의 메인 폼 소스에는 하위 폼 소스를 참조하는 uses문도 없고, 메인 메뉴에 하위 폼 생성 코드도 전혀 없지만, 실행시 자동으로 하위 폼을 생성하는 메뉴와 툴버튼들이 등록됩니다.

하위 폼 소스(fmSub1, fmSub2, fmSub3)들의 하단 부에, 그 자동화를 이루는 코드가 있습니다. 눈치 빠른 고수라면 그 로직이 뭔지는 금방 감잡을 수 있을 것입니다. 일반적인 메인 폼 소스는 자신이 생성할 하위 폼을 명시적으로 코딩합니다. 그러나 이 방식은 하위 폼들이 메인 폼에게 자신을 메인 메뉴의 일부로 등록할 것을 요청하는 방식입니다. 이 방식을 사용하면 하위폼 생성할 때마다, 메인폼에 어떤 코드를 추가할 필요가 전혀 없게 됩니다. 이 방식을 채택하면 당연히 개발 시간이 단축됩니다.

그리고 프라젝트 소스를 보면 메인폼과 로그인 폼 처리 부분에 관한 소스가 있습니다.

AppAdmin.LoginForm := 'TfrmLogin';
AppAdmin.MainForm := 'TfrmMain';
AppAdmin.Run;

로그인 폼 처리에 대한 여러 팁들이 있고, 실행시 메인폼을 변경하는 여러 팁들이 있지만, 이를 어떻게 간단하게 하느냐 방법을 모색한 결과, 저는 이 방식을 선택했습니다.

이 어플리케이션 라이브러리는 SDI 방식을 채택하기 때문에, 작업 폼들의 파괴 역시 자동화합니다. 다른 작업 폼을 선택하는 메뉴를 선택하는 즉시, 현재 폼은 파괴 됩니다. 하위 폼에 메인 메뉴가 있다면, 메인폼 메인메뉴와 자동 결합합니다. 이 때문에 실행시 메인 메뉴가 동적으로 변경되는 것을 볼 수 있습니다. 아직 구현하지는 않았지만, 하위 폼들의 툴버튼 생성 역시 자동화할 수 있습니다.

혹시 다른 개발자들도 이런 비슷한 개념으로 자기만의 개발환경 라이블러리를 가지고 있다면, 그 아이디어를 공유하고 싶습니다. 핵심라이브러리 소스 공개까지 바라지 않습니다. 단지 어떤 과정을 이런식으로 자동화했다는 아이디어만 공유할 수 있다면 좋겠습니다. 본인이 힘들여 만든 라이브러리를 아무런 대가없이 거저 받기를 저도 원치 않기 때문입니다.

제가 만든 라이브러리 소스는 포함하지 않았기 때문에, 첨부한 데모 프라젝트는 컴파일은 안됩니다. 단지 여러분들이 이런 반복 작업을 지금까지 계속 행하고 있었다면, 델파이에서 이런 방식으로 그 과정을 단순화할 수 있다는 아이디어를 제공하려는 목적에서 이 예제를 공개할 뿐입니다.

델파이가 다른 개발툴에 비해 코딩량이 많다는 말이 종종 들리는데, 이 예제가 그런 말도 안되는 주장을 일축시켰으면 좋겠습니다.

+ -

관련 글 리스트
18 어플리케이션 프레임웍 만들기 주정섭 6285 2003/05/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.