2009. 12. 1. 16:19

TDateTime형 - 1

날짜와 시간의 연산

델파이가 날짜와 시간을 담기 위해 사용하는 기본형은 TDateTime형이다. 이것은 System.pas 안에 다음과 같이 선되어 있다.

type TDateTime = type Double;

델파이의 TDateTime형은 1899년 12월 30일 자정(12:00 AM)부터의 날짜와 시간을 담고 있다. 1이 하루를 의미한다. 즉, 1은 1900년 1월 1일 12:00 AM이 된다. 2는 1900년 1월 2일 12:AM이 된다. 이런식으로 해서 1997년 1월 1일은 35431이 된다.

하루가 1이기 때문에 TDateTime끼리의 연산은 아주 쉽게 이루어진다. 자신이 현재 몇일을 살아왔는가를 알려주는 함수를 작성해보자.

// 자신이 살아온 날수, GetLivingDates('70-04-20')
function GetLivingDates( ABirthDay : String) : Integer;
begin
Result := Trunc( Date - StrToDate( ABirthDay ) );
end;

너무 간단한가? Date 함수는 오늘일자를 TDateTime형으로 되돌리는 함수이고 Trunc는 Real형을 Integer형으로 바꾸어주는 함수이다.
하루를 1로 잡음으로 인해서 시간의 단위는 아주 복잡하게 되어 버렸다.
TDateTime형과 관련해 다음의 등식이 성립한다.

24시간 = 1
1시간 = 0.04166666666667
1분 = 6.944444444444e-4
1초 = 1.157407407407e-5

1초가 1.157407407407e-5라는 것은 언 듯 외우기에도 쉽지 않다. 하지만 이것은 여러분이 인지하기가 힘들다는 것 뿐이지 연산은 날짜와 마찬가지로 아주 간단하게 이루어진다. 그럼 여러분이 현재 몇 시간을 살았는지를 알아보는 함수를 작성해 보자.

// 자신이 살아온 시간, GetLivingTimes( '97-04-20 14');
function GetLivingTimes( ABirthDateTime : String) : Integer;
begin
Result := Trunc(((Now - StrToDateTime( ABirthDateTime ))*24));
end;

Now는 현재 일자와 시간을 TDateTime형으로 되돌리는 함수이다. 24를 곱해준 이유는 1일이 24시간이므로 시간으로 환산해 주는 것이다. 결과 값 1.25는 하루와
6시간이 지난 시간이므로 1.25*24는 24+6 즉, 30시간이 된다. 분과 초 역시 다음
과 같이 아주 간단하게 연산이 된다.

// 자신이 살아온 분, GetLivingMinutes('71-04-20 14:32');
function GetLivingMinutes( ABirthDateTime : String) : Integer;
begin
Result := Trunc(((Now-StrToDateTime( ABirthDateTime ))*24*60));
end;
// 자신이 살아온 초, GetLivingSeconds('71-04-20 14:32:33');
function GetLivingSeconds( ABirthDateTime : String) : Integer;
begin
Result := Trunc(((Now-StrToDateTime( ABirthDateTime ))*24*60*60));
end;

TDateTime을 이용함에 있어서 1이 하루다라는 개념만 파악하면 모든 날짜, 시간 연산을 자유자재로 할 수 있게 된다. 하지만 이 연산이 자유로운 것은 Date, Now 등 TDateTime형 관련 함수나 프로시져가 있기 때문이다.

'Delphi' 카테고리의 다른 글

단축키 모음  (0) 2010.03.22
TDateTime형 - 3  (0) 2009.12.01
TDateTime형 - 2  (0) 2009.12.01
델파이의 데이터형  (0) 2009.11.24
델파이의 개요  (0) 2009.11.24
2009. 11. 24. 17:35

델파이의 데이터형

■ 정수형
정수형의 종류

범위 형식
Byte 0~255 부호없는1바이트
Shortint -128~127 부호있는1바이트
Word 0~65535 부호없는2바이트
Smallint -32768~32767 부호있는2바이트
Integer -2147483648~2147483647 부호있는4바이트
Longint -2147483648~2147483647 부호있는4바이트
Cardinal 0~2147483647 부호없는4바이트

16진수를 표시할때는 숫자앞에 $를 붙인다.
nHex := $FF;

변수의 선언예
nInt:Integer;

■ 실수형
실수형의 종류

유효자릿수 바이트수
Single 7-8    4
Double 15-16    8
Extended 19-20 10
Comp 19-20 8
Currency 19-20 8

Comp(계산)형은 -9,223,372,036,854,775,808~9,223,372,036,854,775,807(-2~2- 1)사이의 정수값
Currency형은 돈 계산에 적절한 고정 소숫점 데이터 형

Double이 가장 많이 쓰여진다.

변수의 선언예
dVal:Double;

■ 문자열형
문자와 문자열의 데이터형

길이 비고
Char 1바이트 일반 문자
WideChar 2바이트 UNICODE문자(OLE로 사용되어짐)
String 메모리 크기의 제한 일반 Pascal문자열
PChar 포인트와 같음 실체는 문자배열

String은 일반적으로 꽤 긴문자도 취급할수 있지만 컴파일러에서 $H-를 지정하면 최대 255문자까지로 제한된다.
PChar는 C언어 호환 문자열로 O(NULL)로 문자열이 끝난다. PChar 자신은 C언어와 같이 포인터이기 때문에 문자열 실체를 어딘가에 따로 가지고 있어야된다.

사용예
var Msg: array[0..127] of Char; // C문자열 실체
pMsg:PChar;
...
    pMsg := Msg;

String형은 길이를 선언으로 지정할 수 있다.

사용예
str:String[10];

■ 논리형
노리형은 True와 False의 값을 가진다.

사용예
bFlag:Boolean;

■ 포인터형
포인터형에는 형이 붙을때와 형이 붙지않을때가 있다.
형이 붙을때는 그 형의 앞에 ^를 붙여서 선언한다.
포인터의 간곳의 값은 포인터 변수의 뒤에 ^을 붙여서 참조한다.

사용예
var
    p: ^Integer;
...
    i := p^;

형이 없는 포인터는 C언어의 void*에 해당한다.

사용예

var p:Pointer;

어떤 포인터가 어디도 가르치고 있지않을때의 값은 nil(C에서 NULL에 해당)이다.

■ 배열
배열은 다음과 같이 선언한다.
[]의 안에 배열의 최소값과 최대값을 ..으로 구분해서 기술한다.

사용예
A:array[0..255] of Byte;

■ 레코드형
레코드형은 C언어에서 구조체에 해당한다.
레코드형은 유저 정의형임으로 var뒤에 오지않고 type뒤에 선언한다.

사용예

type
    TheRecord = record
        name: String;
        code: Smallint
    end;

var data: TheRecord;

■ 집합형

집합형은 집합을 정의할 때 사용한다.
C에서의 enum과 비슷하다.

사용예

type
    TMySet = set of Char;

var
    Fset: TMySet;

■ 클래스
클래스는 C++의 클래스에 해당한다.
즉 레코드형에 메서드 선언을 가능하게하여 멤버 보호를 정의할 수 있게한 것.
단 C++의 클래스에 없는 특징이 있다. 그것은 C++에서는 이 보호 규정이 private, protected, public이지만 델파이엥서는 published라는 것도 있다.
이것은 설계할때 오브젝트 브라우저로 편집할찌 안할찌를 지정한다.
published속성을 갖는 멤버는 public이기도 하다.

사용예

type
    TMyClass = class

    public
        procedure Method1();
        function Func1(nX:Integer): Integer;
    private
        nData: Integer;
    end;

클래스는 오브젝트 지향 프로그래밍의 기초가 된다.
클래스를 제대로 이해하지 못하면 델파이 프로그램을 만들수 없다.

■ 상수
상수는 값이 변하지않는 기본형의 값이다.
C언어에서의 #define에 해당한다.
상수는 const로 선언한다.

사용예

const
    PI = 3.141592;
    Folder: String = 'd:\Work\temp.txt';

■ 라벨
라벨은 goto문에 이동할 곳을 나타내는 번호이다.
다른 언어에서는 라벨은 선언하지 않고 쓰지만 파스칼에서는 선언이 필요하다.
(일반적으로 goto문은 잘 사용하지않는다.)

사용예
label
    TestGoto;

 

'Delphi' 카테고리의 다른 글

단축키 모음  (0) 2010.03.22
TDateTime형 - 3  (0) 2009.12.01
TDateTime형 - 2  (0) 2009.12.01
TDateTime형 - 1  (0) 2009.12.01
델파이의 개요  (0) 2009.11.24
2009. 11. 24. 17:18

델파이의 개요

1. 델파이란

(1) RAD(Rapid Application Development) Tool이다.
델파이는 최상의 윈도우 개발 환경을 지원한다. Delphi는 분산된 엔터프라이즈 및 웹에서 운용 가능한 가장 종합적이고 시각 적인, 고성능의 Client/Sever 응용프로그램 개발툴이다. Delphi에서 제공하는 다양한 도구는 리모트 서버 시스템, 그리고 랩 탑 컴퓨터 및 웹 브라우저와 같은 다양한 시스템을 구성할 때 가벼운 클라이언트 응용프로그램 환경을 제공할 뿐만 아니라 확 장성과 유연성을 동시에 갖는다.
Delphi 자체가 Delphi 언어(Object Pascal)로 작성되었으며, 전체환경 은 하나의 델파이 응용프로그램이다.
 

(2) 빠른 통신 기능 및 분배 그리고 확장성

(3) CORBA를 이용한 전사적 데이터 통합

(4) 어떠한 데이터도 언제나 어느 곳에서도 유연한 접속 처리
프로그래머라면 모두 아는 바와 같이 많이 사용되고 있는 RAD 도구로 Visual Basic이 있다. 델파이와 비주얼베이직을 살펴보면 개발환경이 거의 비슷하다는 것을 느낄 수 있다. 두 제품은 마치 형제처럼 보인다. 단지 내부 문법이 다를 뿐이지 외형은 너무 비슷하다. 볼랜드 사가 델파이를 만들게된 동기를 다음과 같이 유추해 볼수 있을 것이 다. 마이크로소프트 사는 윈도우(Windows3.1) 환경에 새로운 기법으로 프로그램을 작성할 수 있는 새로운 형태의 언어를 비주 얼 베이직으로 개발해 출시했고 터보 C로 유명하던 볼랜드사도 이에 자극을 받아 델파이라는 제품을 개발하게 되었을 것이다. 그런데 기본이 되는 언어를 무엇으로 할것 인가에서 옛날에 각광을 받았든 쉬우면서도 강력했던 파스칼 언어를 채용한 것이다. 마이크로소프트 사가 배우기 쉬운 QBASIC을 그대로 사용하면서 객체 개념을 추가하니 볼렌드에서도 파스칼 언어에 객체 기법을 포함한 객체 지향 파스칼 언어(Object Pascal Language)를 사용했다. 지금까지 교육용 언어로 가장 많은 지지를 얻고 있던 파스칼 언어가 비주얼베이직을 이길 수 있을 것이라고 확신하였을 것이다. 


2. 델파이의 성능

성능을 이야기하려면 다른 RAD 제품과 비교해 보는 것이 가장 알기 쉬운 방법이 될 것이다. 

컴파일 속도:
전반적인 컴파일 속도는 이전 버젼(3.0)에 비해 느려졌다. 그러나 체감 속도를 비교했을 때 VB나 PB보다 약간 빠른 것으 로 평가된다. 실제로 델파이는 순수한 컴파일러방식 이기 때문에 다른 RAD계열의 툴보다 빠른 속도를 보인다.
 

실행파일크기:
기장 기본적인 폼을 이용해 창(윈도우)를 화면에 출력하는 형태의 프로젝트를 생성할 경우(단, 컴파일 옵션에서 디버깅 정보를 제외하고 컴파일한 후에 생성된 실행파일의 크기를 기준) 델파이는 별도의 런타임(Run-Time) 라이브러리가 필요하지 않으므로 275KByte이다. 하지만 VB는 생성된 프로젝트 크기16,384Byte 에다 배포용 해당 컨트롤까지 모두 복사해야 하므로 기계어방식으 로 컴파일하든 인터프리터 방식으로 컴파일하든 2MByte의 크기가 넘게 된다. PB도 VB와 비슷하다. 배포해야 할 DLL(PBVM60.DLL) 파일의 크기가 3MB가 넘는다.

Win32 API 지원:
델파이4.0은 Window API를 완벽하게 지원한다. 이점 때문에 C언어에서 파스칼로 포팅이 용이하다. VB은 포인터와 유니온(Union) 의 부재로 인한 모든 API를 100% 사용은 불가능하다. AddressOf 연산자를 이용해 CallBack 함수의 사용이 5.0버젼부터 지원되지 만 6.0버젼에서는 쓰레드 관련 API에서 문제가 보이고 있다. 반면에 Win32 타입 라이브러리를 이용하면 아주 손쉽게 API를 사용 할 수 있기도 하다. PB는 포인터가 없어서 모든 API와 100% 호환이 불가능하다. Win32 API를 사용하는데 문제는 없지만 RECT와 같은 구조체를 자체적으로 지원하지 않아서 사용자가 직접 정의해 사용해야 하는 불편함이 있다.

포인터지원:
델파이4.0부터는 자체적인 지원으로 기존의 DB툴을 사용하지 않고 단지 링크드리스트(Linked List)나 더블 링크드 리스트(Double Linked List) 같은 자료구조용 알고리즘을 이용한 데이터베이스 구축이 가능하다. 이것으로 인해 게임 제작이시 유용성이 크다. VB는 자체 포인터 개념이 없다. MS사는 VB를 최대한 안정성에 역점을 두고 제작했기 때문에 포인터를 제공하지 않았다고 한다. PB도 포인터를 사용할 수 없다. 그러나 구조체나 배열을 이용하면 어느 정도 포인터를 대신한 역할이 가능하다.

다양한 컴포넌트 지원:
매우 편리하고도 다양한 컴포넌트를 지원한다.


3. 델파이의 장점

멀티-티어(Multi-Tier) DB 아키텍처 마이다스(MIDAS):
100개 이하의 DB클라이언트를 관리하는 경우 C/S 모델의 2-티어 만으로 충분하겠지만, 1천 개 또는 1만 개 이상의 클라이언트가 접속하면 병목현상이 일어난다. 델파이에서는 미들 서버를 통해 DB서버의 부하를 줄이고 자원을 효율적으로 관리함으로써 보다 많은 클라이언트의 연결을 가능하게 하는 마이다스 아키텍처를 제공한다. 마이다스는 DCOM,CORBA, OLEnterprise, Socket 등 많은 프로토콜을 제공하며 부분적으로 균형과 실패 복구(Fail-over) 기능을 지원하다.

CORBA 지원:
개발환경에서 CORBA 지원이 잘 통합되어 있는 유일한 개발 툴(RAD 툴中)이다. CORBA 객체와 멀티-티어를 위한 DB CORBA 서버 객 체(Data Module)를 생성하는 위저드를 제공한다.

인라인 어셈블리(Inline Assembly):
소소코드에 어셈블리어를 포함시켜 컴파일할 수 있기 때문에 속도를 원하거나 보다 직접적인 제어가 필요한 부분은 에셈블리어 를 사용해서 최적화할 수 있다. 델파이 런타임 라이브러리의 많은 부분이 인라인 어셈블리로 코딩되어 있어서 델파이의 응용프 로그램은 그만큼 빠르다.

순수한 컴파일러방식:
순수한 컴파일러 방식을 사용하기 때문에 VCL(Visual Component Library)이 없이도 자체 언어와 Window API 함수만으로도 윈도 우용 응용프로그램을 제작할 수 있으며 또한 C언어와 유사한 점이 많아서 C로 작성된 프로그램을 파스칼로 포팅이 가능하다.
 

독자적인 실행 파일:
별도의 배포용 동적연계라이브러리(DLL: Dynamic Linked Library)가 없이 실행 파일만으로 완전 동작을 한다. 다만, 데이터베이 스사용시 볼랜드 데이터베이스 엔진(BDE)을 사용한 경우 실행 파일과 함께 BDE를 배포해야 한다.


4. 델파이의 단점

한글지원이 없다:
소스코드에서 문제가 없는 한글이 실행 파일로 가면서 문제가 발생 될 수도 있으며 변수나 속성 등을 한글로 사용할 없다.
한글 처리가 취약한 편이다. 

자체분석/설계 모델링 툴이 없다:
최근 들어서 대부분의 개발툴은 자신이 작성한 응용프로그램의 분석,설계에 관한 모델링 툴을 지원하고 있다.

로컬 SQL은 다음의 경우 테이블(Table)의 수정이 불가능하다:
3개 이상의 테이블을 조인(Join)한 경우.
UNION, INTERSECT 또는 MINUS를 사용한 경우.
서브 쿼리(Sub Query)를 사용한 경우.
색인이 없는 데이터베이스의 필드를 Order By 구문에 사용한 경우.

 
5. 델파이 프로그램의 개발 방법

(1) 시스템 분석과 설계

(2) 화면(Form) 디자인
화면에 출력할 사용자 인터페이스를 디자인한다.

(3) 컴포넌트 배치 및 속성 설정
이것에 배치할 각종 컴포넌트 종류와 기능을 사용자가 숙지해야 한다.

(4) 코딩
델파이는 코드 작성을 쉽게 하도록 마련한 여러 가지 위저드와 도우미가 있다.
이런 것들을 이용해서 코딩하면 보다 편리한 작업 환경에서 프로그램을 작성할 수 있다.

(5) 컴파일 및 테스트
프로그램을 컴파일하고 에러를 수정한다.

(6) 실행
프로그램을 실행한다.

'Delphi' 카테고리의 다른 글

단축키 모음  (0) 2010.03.22
TDateTime형 - 3  (0) 2009.12.01
TDateTime형 - 2  (0) 2009.12.01
TDateTime형 - 1  (0) 2009.12.01
델파이의 데이터형  (0) 2009.11.24