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

델파이 강좌/문서
Delphi Programming Tutorial&Documents
[96] 어떤 실행 코드를 배열에 저장하고 나중에 한꺼번에 실행하기
주정섭 [jjsverylong] 4652 읽음    2006-04-28 16:19
최근 뜻한 바(?) 있어 델파이 강좌글은 더이상 쓰지 않으려 했으나, 델마당에 가보니 무척 재밌는 질문이 하나 올라와 있어서 여기 소개하고 이 문제를 여러분들과 함께 풀어 봤으면 한다.


[제목 : 함수를 변수에다 기억해서 변수로 실행하기]

그 내용인즉,

과정 1: 다음과 같은 배열 변수 정의 문이 있다고 가정하자.

a : Array[1..3] of TSomeSuperUltraType;

과정 2: 다음과 같이 a 배열의 각 요소 값으로  캔버스에 그리는 작업을 등록시킨다.

a[1]:= Image1.Canvas.Rectangle( 10, 10, 100, 100 ); // 사실 이 문법 자체가 델파이에서는 불가능하다.
a[2]:= Image1.Canvas.LineTo( 100, 100 );      //
a[3]:= Image1.Canvas.LineTo( 200, 200 );      //

과정 3 : 그리고 어딘가에서 다음과 같은 코드를 수행한다고 가정하자.

for i := Low(a) to High(a) do
    Execute(a[i]);
   
위 코드의 실행 결과는 다음과 같이 되어야 한다.
   
Image1.Canvas.Rectangle( 10, 10, 100, 100 );
Image1.Canvas.LineTo( 100, 100 );
Image1.Canvas.LineTo( 200, 200 );
   
이 질문의 요지인즉, 실행 코드를 보관할 수 있는 데이타 타입이 델파이에 있는가이다. 불행스럽게도 그런 타입은 델파이에는 없다. 예전 DOS 시절에 Dbase나 Clipper를 사용해본 사람이라면 이 문제를 해결하려면 매크로라는 기능이 필요하다는 것을 알 것이다. DBase의 매크로란 실행 코드를 문자열로 보관하고 이를 나중에 실행하는 것이다. 예를 들어..

a = "DoSomeFunc(10, 30)"; // 실행 코드를 문자열 변수에 보관
&a    // DoSomeFunc(10, 30) 이 실행된다.

클리퍼는 eval 이라는 특수한 함수가 있는데, 문자열을 나중에 실행하는데 좀더 유연한 방법을 제공했었다.

a = "DoSomeThing(x, y)"

eval(10, 20, a) <-- DoSomeThing(10, 20) 이 실행된다.

불행스럽게도 순수 컴파일러 환경인 델파이는 인터프리터나 런타임 언어에서만 가능한 이런 매크로 기능을 제공하지 않는다. 그렇다면 이 문제를 어떻게 풀어야 될까? 사실, 종종 이런 기능이 델파이에 있었으면 하는 생각이 들때가 있긴 하다.

[문제 요약]

질문자가 원하는 것은, 프로그램 실행시에 사용자가 원하는 그리기 작업들을 배열로 저장해 뒀다가, 나중에 한꺼번에 실행시키기를 원한다는 것이다. 그 그리기 작업 실행 순서는 사용자 맘대로 이며, 어떤 그리기 작업인지도 사용자가 결정한다. 따라서 이 경우 함수포인터는 별로 문제 해결에 도움이 되지 않는다.

이 문제해결책의 한 방법으로 인터프리터 패턴을 사용할 수도 있다. 예를 들면  파스칼 스크립트 같은 파스칼 인터프리터 콤포넌트를 사용하는 것이다. 그러나 외부 콤포넌트 사용없이 이 문제를 한번 풀어 보자.

여러분들은 이 문제를 어떻게 푸시겠는가? 기막힌 아이디어를 고대해 본다. 아마도 여러 델파이 개발자들을 탄복하게  할 기막힌 아이디어들이 많이 나올 것이라고 기대해 본다. 조만간 내가 생각해낸 방법도 한번 선보이도록 하겠다.

+ -

관련 글 리스트
96 어떤 실행 코드를 배열에 저장하고 나중에 한꺼번에 실행하기 주정섭 4652 2006/04/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.