< 화면 1> 콤보박스 < 화면 2> 리스트박스 < 화면 4> TComboBox 의 Items 프로퍼티 객체지향프로그래밍을한마디로설명하기에는다 소무리가있습니다. 객체지향프로그래밍은지금까 지도많은사람들이연구하고있으며객체지향프로 그래밍만다루고있는단행본도많이출간될정도로 객체

Similar documents
. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요

PowerPoint Presentation

gnu-lee-oop-kor-lec06-3-chap7

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

JAVA PROGRAMMING 실습 08.다형성

델파이 4 프로그래밍의 이해 (Understandings of Delphi 4 Programming)

Microsoft PowerPoint - chap01-C언어개요.pptx

PowerPoint Presentation

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

 메소드 오버로딩

오버라이딩 (Overriding)

PowerPoint Template

Microsoft PowerPoint 장강의노트.ppt

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

4장기본프로그래밍2

No Slide Title

Microsoft PowerPoint - CSharp-10-예외처리

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

Visual Basic 반복문

<432B2BC7C1B7CEB1D7B7A1B9D628BABBB9AE5FC3D6C1BE295B315D2E687770>

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

PowerPoint Presentation

PowerPoint Presentation

MF3010 MF Driver Installation Guide

Visual Basic Visual Basic 소개

슬라이드 1

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

17장 클래스와 메소드

JVM 메모리구조

설계란 무엇인가?

Network Programming

JAVA PROGRAMMING 실습 05. 객체의 활용

Design Issues

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localentitymanagerfactorybean" p:persistenceunitname=

PowerPoint Presentation

Microsoft PowerPoint - 2강

PowerPoint 프레젠테이션

제11장 프로세스와 쓰레드

JUNIT 실습및발표

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

PowerPoint 프레젠테이션

Microsoft PowerPoint - additional08.ppt [호환 모드]

<4D F736F F F696E74202D20C1A C0E520B5B5C5A5B8D5C6AE20C6C4C0CF20C0D4C3E2B7C220B9D720B4D9BEE7C7D120BAE420C5ACB7A1BDBA2E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - Chapter 6.ppt

제8장 자바 GUI 프로그래밍 II

Microsoft PowerPoint - chap06-2pointer.ppt

C++ Programming

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - Chap12-OOP.ppt

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

PowerPoint Template

SOFTBASE XFRAME DEVELOPMENT GUIDE SERIES ActiveX 컴포넌트가이드 서울특별시구로구구로 3 동한신 IT 타워 1215 호 Phone Fax

Microsoft PowerPoint - chap10-함수의활용.pptx

ISP and CodeVisionAVR C Compiler.hwp

작성자 : 김성박\(삼성 SDS 멀티캠퍼스 전임강사\)

No Slide Title

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint Template

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - additional03.ppt [호환 모드]

슬라이드 1

Microsoft PowerPoint - additional01.ppt [호환 모드]

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

Tcl의 문법

Slide 1

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

Microsoft PowerPoint - 09-CE-14-리스트콤보박스

금오공대 컴퓨터공학전공 강의자료

슬라이드 1

歯MDI.PDF

어댑터뷰

C# Programming Guide - Types

[Brochure] KOR_TunA

ADP-2480

U.Tu System Application DW Service AGENDA 1. 개요 4. 솔루션 모음 1.1. 제안의 배경 및 목적 4.1. 고객정의 DW구축에 필요한 메타정보 생성 1.2. 제품 개요 4.2. 사전 변경 관리 1.3. 제품 특장점 4.3. 부품화형

자바 웹 프로그래밍

C++ Programming

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

PowerPoint Presentation

MF5900 Series MF Driver Installation Guide

쉽게

윈도우즈프로그래밍(1)

제 1장 C#의 개요

델파이 4 IDE의 내부 (Internals of Delphi 4’s IDE)

지난시간에... 우리는 kernel compile을위하여 cross compile 환경을구축했음. UBUNTU 12.04에서 arm-2009q3를사용하여 간단한 c source를빌드함. 한번은 intel CPU를위한 gcc로, 한번은 ARM CPU를위한 gcc로. AR

View Licenses and Services (customer)

Semantic Consistency in Information Exchange

C++ Programming

Microsoft PowerPoint - 2-Objective-C 기초

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

OOP

Transcription:

Why 왜델파이인가 2 완벽한 OOP 를지원하는 델파이 우리는델파이에서폼을비롯한모든컴포넌트가클래스로포장돼있다는것을배웠습니다. 또한델파이사용자는클래스를그리잘다루지못해도폼디자이너를통해클래스를자동으로만들어사용하게된다는것도배웠습니다. 델파이는많은양의컴포넌트를갖고있는데그컴포넌트들은모두 TObject라는클래스를시작으로여러단계를거쳐상속되고있습니다. 그렇기때문에컴포넌트라이브러리에는폼디자이너에서사용할수있는컴포넌트의 수보다훨씬더많은수의클래스를갖고있습니다. 컴포넌트를개발할정도의수준이되면이클래스들을잘알고있어야합니다. 다행히도컴포넌트라이브러리는객체지향적으로상당히잘만들어져있어서라이브러리전체를익히는데그리어렵지않습니다. 그럼델파이의컴포넌트라이브러리는어떤점에서객체지향적으로잘만들어져있는지하나씩살펴보도록하겠습니다. 델파이는 VCL이라는컴포넌트라이브러리를갖고있습니다. 지난호에서델파이의폼역시컴포넌트의일부분이라는것을알아봤습니다. 이번호에서는델파이의컴포넌트라이브러리가운데객체지향프로그래밍이잘적용된몇가지예제를살펴보도록하겠습니다. 델파이는객체지향프로그래밍을배울수있는좋은도구입니다. 델파이를접하면객체지향프로그래밍은저절로배울수있게됩니다. 37 양병규 bkyang@ensiz.co.kr 연재순서 필자는델파이초기버전때부터델파이개발자로활동하고있으며, 한국델파이동호회델마당 (www.delmadang) 의회장과한국델파이연합 (www.delphi.or.kr) 위원을역임하고있다. 도움말저작툴인헬프워드의개발자이기도한그는현재엔시즈의 R&D팀책임연구원으로일하고있다. 1회 2002.1 컴파일언어를넘어최적의개발환경을위한언어로 2회 완벽한 OOP를지원하는델파이 3회 API를앞서는델파이의퍼포먼스 4회 델파이로모든플랫폼을장악하라 5회 DB에서게임까지, 델파이로만들자 6회 생산성을향한끝없는전진, 델파이

< 화면 1> 콤보박스 < 화면 2> 리스트박스 < 화면 4> TComboBox 의 Items 프로퍼티 객체지향프로그래밍을한마디로설명하기에는다 소무리가있습니다. 객체지향프로그래밍은지금까 지도많은사람들이연구하고있으며객체지향프로 그래밍만다루고있는단행본도많이출간될정도로 객체지향프로그래밍은어려우면서꼭필요한분야 < 화면 3> 멀티라인에디트 인것입니다. 객체지향에관한높은관심을반영하듯 스트박스, 그리고에디트에서문자열아이템을추가 마소 Jr. 에서도객체지향연재를하고있고, 그밖에 하는방법을각각알아보도록하겠습니다. 먼저콤보 < 화면 5> TListBox 의 Items 프로퍼티 다양한곳에서설명하고있지요. 객체지향프로그래 박스의경우문자열아이템을추가하려면다음과같 밍을배우는데있어가장중요한것은, 꼭소스코드 은코드를사용합니다. 가동반된예제를함께풀어가야한단것입니다. 우리가하게될객체지향프로그래밍에서도가장중요한것은클래스입니다. 물론클래스만으로프로그래밍을하지는않습니다. 우리가작성할소스코드에서가장주가되는것이클래스라는말입니다. 그러므로객체지향프로그래밍을하기위한가장기본적인요소는클래스를잘다루는것입니다. 아직델 S := 문자열 ; SendMessage( ComboBox, CB_ADDSTRING, 0, Integer( PChar( S ) ) ); procedure TForm1.Button3Click(Sender: TObject); S := #13#10 문자열 ; SendMessage(Memo, EM_REPLACESEL, 0, Longint(PChar(S))); TStrings의 Add 메쏘드를이용해아이템을추가했습니다. 두번째로리스트박스에서아이템을추가하는경 파이에서클래스를잘다루지못한다면, 혹은아직까 우입니다. 지도델파이의컴포넌트를제작할줄모른다면이시 콤보박스는 SendMessage API 를이용해콤포박 역시에디트의핸들에메시지를보냄으로써문자 간을계기로클래스를다루는것을꼭공부하기바랍니다. 클래스만잘다룬다면컴포넌트도어렵지않게 스의핸들에 CB_ADDSTRING 메시지와문자열의포인터를전달함으로써문자열아이템을추가하게 열을추가하지만메시지의종류가다릅니다. 세가지의컨트롤이문자열리스트를다룬다는점 ListBox1.Items.Add( 문자열 ) 만들수있습니다. 됩니다 (< 화면 1>). 은같지만각컨트롤에문자열아이템을추가하려면 지난호에서우리는델파이의클래스에는메쏘드 자, 이번에는리스트박스의경우를보겠습니다. 각각에맞는방법을이용해야합니다. 물론아이템을 외에도프로퍼티라는것이있다는것을배웠습니다. 추가하는것외에도삭제 삽입 수정을하는경우 콤보박스에서와똑같은방법을이용하고있다는 38 메쏘드와함께프로퍼티를이용하면보다직관적이고쉬운객체지향프로그래밍을할수있게됩니다. 델파이의컴포넌트라이브러리의특징을살펴객체지향적인프로그래밍을배워보도록하겠습니다. procedure TForm1.Button2Click(Sender: TObject); S := 문자열 ; SendMessage( ListBox, LB_ADDSTRING, 0, Integer( PChar( S ) ) ); 도모두마찬가지일것입니다. 자! 그럼이제부터똑같은내용을델파이의컴포넌트를이용하는경우를보도록하겠습니다. 우선첫번째로콤보박스에서아이템을추가하는경우입니다. 것을알수있습니다. 콤보박스에서와마찬가지로리스트박스에도 Items 프로퍼티를갖고있으며클래스타입도콤보박스의 Items와같은 TStrings형입니다 (< 화면 5>). 그러므로콤보박스에서아이템을추가하는방법이나리스트박스에서아이템을추가하는방법은동일합니다. 39 윈도우의컨트롤중에는문자열리스트를다루게되 마지막으로메모에서문자열을추가하는경우를 는것이있습니다. 콤포박스나리스트박스가그렇고에디트의경우에도멀티라인속성을갖게되면하나의문자열이아닌문자열리스트를다루게됩니다. 문자열리스트란말그대로여러라인의문자열을말 리스트박스의경우에도마찬가지로리스트박스의핸들에 LB_ADDSTRING 메시지와문자열의포인터를전달함으로써아이템을추가합니다 (< 화면 2>). 콤보박스와거의같은방법이나메시지의종류가다 ComboBox1.Items.Add( 문자열 ) 보겠습니다. Memo1.Lines.Add( 문자열 ) 합니다. 윈도우 API 를이용해이컨트롤들에문자열 르다는것을알수있습니다. 콤보박스에는 Items 라는프로퍼티가있습니다 (< 화 아이템을추가하고삭제하려면각컨트롤에맞는방 마지막으로멀티라인에디터에서문자열을추가하 면 4>). 이프로퍼티는 TStrings 형의클래스로돼있 법을이용해야합니다. 한가지예로콤보박스와리 는방법을보도록하겠습니다 (< 화면 3>). 는프로퍼티입니다. Items 프로퍼티의클래스인 메모에는 Lines 라는프로퍼티가있습니다 (< 화면

< 화면 6> TMemo 의 Lines 프로퍼티 있습니다. 이것은이클래스를상속받은클래스에서 아도 TStrings 클래스하나만잘알면델파이에서의 이메쏘드의기능을다시재정의할수있게해줍니 다음은리스트박스의경우를보겠습니다. 리스트박 문자열리스트를다루는모든컴포넌트들을다룰수 다. 그럼처음에얘기했던대로세가지의컨트롤들 스에도 Items 는 TStrings 형으로돼있습니다. 그러 있게됩니다. 은문자열아이템을추가하는데는각기자신의방법 나이역시프로퍼티변수가생성되는부분을보면 을이용해야하는데, 어떻게델파이의컴포넌트에서 다음과같습니다. 는모두똑같은 TStrings 의 Add 메쏘드를이용할수 이것은클래스의상속성을이용하는아주좋은예제 있는지그방법을알아보겠습니다. FItems := TListBoxStrings.Create; 입니다. 이런방법으로만들어진델파이의클래스는 이외에도많이있습니다. 그중에서몇가지를보면 6>). 프로퍼티이름은콤보박스나리스트박스와는다 여기서사용된 TListBoxStrings 역시 TStrings 를 우선 TGraphic 이있습니다. 이것은이름그대로그 르게클래스타입은 TStrings 형으로동일합니다. 그 우선콤보박스의경우입니다. 콤보박스의 Items 프 상속받아만들어진클래스입니다. 마찬가지로 Add 림파일을다루는클래스입니다. 하지만 TGraphic 러므로역시콤보박스나리스트박스와같은방법인 로퍼티는 TStrings 형으로선언돼있습니다. 그러나 메쏘드를오버라이드해리스트박스에맞게다시작 역시 TStrings 와마찬가지로그자신이실제로어떤 Lines 프로퍼티의 Add 메쏘드를이용합니다. 이프로퍼티클래스가생성되는부분을살펴보면다 성됐습니다. 그소스코드는다음과같습니다. 기능을갖고있지는않습니다. TGraphic 의메쏘드에 음과같습니다. 는선언만돼있고구현되지않은메쏘드가많이있 그럼이세가지의컴포넌트들이공통적으로갖고있 FItems := TComboBoxStrings.Create; function TListBoxStrings.Add(const S: string): Integer; 습니다. 그것은이클래스는그림파일을다루는데필요한메쏘드와프로퍼티를정의해놓은것입니다. 40 는 TStrings에대해알아보도록하겠습니다. TStr ings에는많은메쏘드와프로퍼티를갖고있는데다음은그중에서가장중요한몇가지요소들입니다. TStrings = class(tpersistent) function Add(const S: string): Integer; procedure Clear; abstract; procedure Delete(Index: Integer); abstract; function IndexOf(const S: string): Integer; procedure Insert(Index: Integer; const S: string); abstract; procedure LoadFromFile(const FileName: string); procedure SaveToFile(const FileName: string); property Count: Integer read GetCount; property Strings[Index: Integer]: string read Get write Put; default; property Text: string read GetTextStr write SetTextStr; 여기에서 FItems는 Items 프로퍼티가가리키는내부변수입니다. TComboBoxStrings는 TStrings 를상속받아새로정의된클래스입니다. TCombo BoxStrings는부모클래스인 TStrings의 Add 메쏘드를오버라이드해다시정의하고있는데그소스코드는다음과같습니다. function TComboBoxStrings.Add(const S: string): Integer; Result := SendMessage(ComboBox.Handle, CB_ADDSTRING, 0, Longint(PChar(S))); if Result < 0 then raise EOutOfResources.Create (SInsertLineError); 우리가처음에배웠던콤보박스의문자열아이템을추가하는방법이이안에서그대로사용되고있다 Result := -1; if ListBox.Style in [lbvirtual, lbvirtualownerdraw] then exit; Result := SendMessage(ListBox.Handle, LB_ADDSTRING, 0, Longint(PChar(S))); if Result < 0 then raise EOutOfResources. Create(SInsertLineError); 리스트박스에아이템을추가하는 LB_ADDSTRI NG 메시지를사용하고있는것을알수있습니다. 메모의경우에도이두가지의컴포넌트와마찬가지로 Lines 프로퍼티는 TStrings형이지만, 실제생성되는클래스는 TMemoStrings입니다. 이 TMemo Strings 역시 TStrings를상속받아만들어진클래스입니다. 이예제를통해우리알수있는것은실제선언된클래스타입은모두가 TStrings인데, 실제생성되는클래스는모두 TStrings를상속받아만들어진새로운클래스라는것입니다. 그리고그클래스들의 Add 실제로이클래스를사용하려면이클래스를상속받아재선언해메쏘드들을실제구현해줘야합니다. 실제로 TGraphic의 Draw 메쏘드를보면다음과같이선언돼있습니다. procedure Draw(ACanvas: TCanvas; const Rect: TRect); abstract; 마지막에붙은 abstract는이메쏘드는선언만돼있고구현부가없다는것을의미합니다. TGraphic 클래스를상속받아만들어진클래스는 TBitmap, TIcon, TMetaFile, TJpegImage 등이있으며이들클래스들은모두 Draw 메쏘드를자신에게맞는방법으로다시작성하고있습니다. 그렇기때문에우리는사용하려는그림파일이비트맵이건아이콘이건혹은메타파일이나 Jpeg이건모두 TGraphic 하나만사용할줄알면이모든파일들을똑같은방법으로다룰수있게됩니다. 41 는것을알수있습니다. 콤보박스의 Items 프로퍼티 메쏘드들은각각사용되는컴포넌트에맞게다시작 의 Add 메쏘드를실행하면결국 TComboBoxSt 성되고있다는것입니다. 그렇기때문에우리는세 이중에서우리가아이템을추가하는데사용했던 rings 의 Add 메쏘드를실행하게되는것입니다. 그 가지의컴포넌트에아이템을다루기위해서는 TStr 또한가지예로서 TStream 이있습니다. TStream 은 것은가장위에있는 Add 메쏘드입니다. 보는것처 러므로콤보박스에는문자열아이템이추가될수있 ings 클래스하나만다룰줄알면되는것입니다. 세 바이너리데이터를읽고저장하는데사용합니다. 하 럼 Add 메쏘드의가장뒷부분에는 virtual 이라고써 었습니다. 가지의컴포넌트에맞는메쏘드를따로따로알지않 지만 TStream 역시바이너리데이터를다루는데필

요한메쏘드와프로퍼티가선언된채실제구현은돼 분을부모클래스에서메쏘드로만들고이메쏘드들 로선언된객체의메쏘드가아니라클래스자료형의 < 화면 7> Jpeg.pas 를 uses 에추가하면 TJpegImage 가자동으로추가된다 있지않습니다. TStream 을상속받아만들어진클래 을자식폼들이오버라이드해사용하는것이좋을것 메쏘드를말합니다. 대표적으로생성자가있습니다. 스로는 TFileStream, TMemoryStream,TResou 입니다. 그런예를하나들면가장흔한데이터베이 다음은 TForm1 의 Create 클래스메쏘드를사용하 rcestream 등이있습니다. TFileStream 은이름그 스애플리케이션을들수있습니다. 고객관리, 제품 는경우입니다. 대로파일에바이너리데이터를읽고쓸때사용합니 관리, 판매관리등여러개의데이터베이스를각각 다. TMemoryStream은메모리에바이너리데이터를읽고쓸때사용합니다. TResourceStream은리소스 하나씩의폼으로관리한다면각폼에는분명히 TDa tasource와 TTable 등이공통적으로사용될것입니 Form1: TForm1;... 를다룰수있는클래스입니다. 처음에얘기했던대로 다. 그리고각폼에는테이블을열고닫거나수정하 Form1 := TForm1.Create( nil ); 파일을다루거나메모리를다룰때는각각에맞는 고검색하는루틴들이공통적으로만들어질것입니 API 를이용해야할것입니다. 하지만델파이에서는 다. 이런경우상속성을이용한다면하나의폼에 TD 여기에서오브젝트 Form1 에 TForm1.Create( 이메쏘드는 TPicture 에 TGraphic 을등록하는데 TStream 하나만다룰줄알면파일과메모리등어디 atasource 와 TTable 을만들고테이블을열고닫고 nil); 를대입했습니다. Create 생성자는 TForm1 이 사용합니다. 즉, TBitmap, TMetaFile, TIcon 등 에든바이너리데이터를읽고쓸수있게됩니다. 검색하는메쏘드를선언해놓은폼을하나만들어여 갖고있는클래스메쏘드입니다. 즉클래스메쏘드는 TGraphic 으로부터상속된그림파일클래스를등록 TCanvas 의경우도그렇습니다. TCanvas 는그림 러폼에서이폼을상속받아서처리한다면보다적은 클래스타입. 메쏘드 ; 가됩니다. 여기에서사용한생 하는용도로사용됩니다. RegisterFileFormat 메쏘 을그리는데사용하는클래스입니다. 화면, 윈도우, 양의코드로쉽게만들수있을것입니다. 성자는클래스메쏘드이지만따로 class 라고표기하 드가실행되면내부적으로 TGraphic 들을리스트화 비트맵에그림을그리거나혹은다이렉트 X 화면이나 지는않습니다. 이외에생성자가아닌일반메쏘드 해관리하게됩니다. 그리고는이그래픽리스트들을 프린터에그림을그릴때나 TCanvas 하나만잘알 를클래스메쏘드로만들려면메쏘드의앞에 class 라 여기저기에서활용하게됩니다. 가장흔한예로 TPic 면모두가가능합니다. 물론각각의디바이스에맞는 클래스의상속성을잘이해했나요? 이젠두번째로 고씁니다. ture 의 LoadFromFile 메쏘드를실행하면 TPicture 클래스가내부적으로따로따로만들어져있지만우 클래스메쏘드에대해배워보도록하겠습니다. 는등록돼있는 TGraphic 들에서로딩하려는파일의 리는 TCanvas 하나만잘알면됩니다. 클래스의메쏘드앞에 class 라고써있는것이있습 확장자와같은파일확장자를가진 TGraphic 을찾아 니다. 이런것들을클래스메쏘드라고합니다. 메쏘 클래스메쏘드를사용하는가장큰이유는매니저와 그클래스타입으로생성하게됩니다. 그러므로새로 드에는오브젝트메쏘드와클래스메쏘드가있습니 아이템의관계를나타내기위해서입니다. 델파이에 운파일포맷의그래픽을 TPicture 의 RegisterFile 클래스의상속성은여러객체에서의공통적인부분 다. 우선이두가지를구분할줄알아야하겠네요. 서사용되고있는가장쉬운예제로는 TPicture 와 Format 메쏘드를이용해등록하면 TPicture 에서다 을하나로모아주는역할을하게됩니다. 그러므로 오브젝트란클래스타입으로돼있는변수를말합 TGraphic 이있습니다. TPicture 는그림자체를말 뤄지는모든기능에서그그래픽을다룰수있게되 그만큼소스코드의양이줄어들뿐만아니라구조적 니다. 그것이하나의객체라는것이지요. 클래스타 하며 TGraphic 은비트맵, 메타파일, 아이콘등그림 는것입니다. TOpenPictureDialog 와같이내부적으 으로이해하기에도쉬워집니다. 클래스의상속성을 입은그자체가오브젝트가아니라하나의자료형일 파일하나를말합니다. 그러므로 TGraphic 은 TPic 로그래픽과관련된컴포넌트에서도 TPicture 에등 42 이용하는방법은많이있습니다. 우선폼을상속하는방법이있을겁니다. 여러개의폼을사용하는애플 뿐입니다. 그것이변수로선언되고사용될때비로소객체라고부르는것입니다. 이때이변수가사용할 ture에의해관리받게됩니다. TPicture에는다음과같은클래스메쏘드가선언 록된그래픽리스트를활용기도합니다. 이와같이클래스메쏘드는아이템클래스가매니 43 리케이션에서각폼이열리고닫힐때폼의상태를 수있는메쏘드를오브젝트메쏘드라고합니다. 다음 돼있습니다. 저클래스에등록할때주로사용되며주로아이템클 레지스트리에서읽어오고쓰는경우를보면각각의 은 Form1 이라는객체의 Show; 메쏘드를사용하는 래스가있는유닛의 initialization 에서사용됩니다. 폼마다레지스트리에읽고쓰는루틴을작성해야할것입니다. 이런것을상속성을이용해처리한다면폼의상태를레지스트리에읽고쓰는기능을가진폼을하나작성하고이폼을상속해또다른폼들을만든 경우입니다. Form1: TForm1;... class procedure RegisterFileFormat(const AExtension, ADescription: string; AGraphicClass: TGraphicClass); 그렇기때문에아이템클래스가들어있는유닛을 uses에선언만하면아이템클래스는자동으로매니저클래스에등록됩니다. 델파이에서그런방법으로사용되는유닛으로 Jpeg.pas가있습니다. 이유닛은 다면그폼들은따로작성하지않아도자동으로폼의 Form1.Show; 앞서얘기한바와같이이와같은클래스메쏘드는 TGraphic 으로부터상속된 TJpegImage 클래스가들 상태가레지스트리에읽히고써질것입니다. 객체. 메쏘드 가아닌 클래스타입. 메쏘드 와같이 어있는데, initialization 에서 TPicture 의 Register 하지만이경우는부모클래스의기능을오버라이 여기에서 Form1 은오브젝트가되고 Show 는오브 사용해야하므로이메쏘드는 TPicture.RegisterFile FileFormat 메쏘드를호출하고있습니다. 그래서우 드하지않고그대로사용하는것입니다. 상속성을보 젝트메쏘드가됩니다. 즉오브젝트메쏘드는 변수 Format 과같이사용해야하며 Picture1.Register 리는 uses 에 Jpeg 만선언해두면 TImgae 와같은곳에 다효과적으로사용하려면여러폼들의공통적인부 명. 메쏘드 ; 가됩니다. 반면에클래스메쏘드는변수 FileFormat 과같이사용할수는없습니다. 서 Jpeg 이미지를사용할수있게됩니다 (< 화면 7>).

이외에도클래스메쏘드는여러곳에서쓰이고있습니다. TRichEdit에서도클래스메쏘드는사용되고있습니다. 리치에디트에는파일에서읽어들이거나파일로저장할때표준리치에디트포맷이아닌다른포맷으로변환할수있게해주는기능이있는데이때 TConversion이라는클래스를사용합니다. 그리고 TRichEdit에는다음과같이 TConversion을등록하는클래스메쏘드를갖고있습니다. class procedure RegisterConversionFormat(const AExtension: string; AConversionClass: TConversionClass); 터유닛을다른사람이따로만들때각유닛을매니저유닛의 uses에추가만하면그기능이자동으로추가되도록할수있을것입니다. 또게임에서도사용될수있습니다. 여러개의캐릭터가등장할때, 각캐릭터를각각의유닛으로만들고해당유닛을 uses 에추가하면해당캐릭터가게임에추가되도록할수있을것입니다. 압축유틸리티와같은곳에서도클래스메쏘드는유용하게사용될수있습니다. 압축파일한가지를하나의유닛에만들고 uses에압축파일유닛들을추가할수있습니다. 44 여기에서도그래픽의경우처럼파일의확장자와클래스타입을파라미터로지정하게돼있습니다. TRichEdit는 SaveToFile 메쏘드나 LoadFromFile 메쏘드를실행하면파일확장자를확인해등록된 TConversion를찾아해당 TConversion에게파일을저장하고읽어오도록시킵니다. 물론 TConversion 이들어있는유닛에도 initialization에서 TRchEdit 의 RegisterConversionFormat 메쏘드를실행하게만들어야합니다. 그러면델파이사용자는새로운 T Conversion이들어있는유닛을 uses에추가하기만하면 TRichEdit에서파일을저장할때해당파일확장자로저장하면해당 TConversion이자동으로생성돼파일을처리합니다. 간혹이기능을이용해 TRi chedit에서워드파일이나한글문서를읽고쓸수있는컴포넌트를볼수있습니다. 객체지향프로그래밍은클래스를잘다루고잘이해하는데서시작됩니다. 이번호에서배운두가지의내용은객체지향프로그래밍의일부에지나지않습니다. 프로그래머가얼마만큼객체지향프로그래밍을효과적으로잘이용하느냐에따라서프로그램의양과완성도가달라지게됩니다. 또한팀단위작업에서도얼마만큼효과적인객체지향프로그래밍을하느냐에따라서팀원간에손발이잘맞는지도결정이됩니다. 델파이는객체지향프로그래밍에가장좋은툴입니다. J 정리 : 이종림 nowhere@sbmedia.co.kr 클래스메쏘드는객체지향프로그래밍에서도그리많이사용되지않고있습니다. 그러나잘사용하면매우효과적인프로젝트관리를할수있게됩니다. 데이터베이스프로그래밍에서여러개의데이터를사용하고각데이터가하나의유닛으로처리될때, 클래스메쏘드를효과적으로적용할수있습니다. 메인매니저유닛을프로젝트매니저가만들고각데이