본문 바로가기

Developement/DELPHI (pascal)

[DELPHI] 델파이, 그 이전에 파스칼(PASCAL)


델파이 언어는 Object Pascal 이라는 객체지향 파스칼 언어에 해당합니다.
정확히는 Object Pascal 형의 언어가 되는 격 입니다 (코드기어 즉, 볼랜드 측에서는 델파이 랭귀지 라고 호칭합니다)
C 에서도 C 와 C++ 이 존재 하듯이, Pascal 역시 Object Pascal 이 C++ 에 해당하는 구조라 하겠습니다.

Pascal 의 경우는 C 와 달리 type casting이 매우 정확 해야 하며, 이로 인해 유연성이 C 에 비해 많이 떨어 지는 편 입니다.
그로 인해 델파이 에서는 그런 문제들을 위해 다양한 포인터를 지원하고 이로 인해 C 나 C++ 로 만든 DLL 과도 완벽한 호환이 가능하고 재사용이 가능합니다.

문법에 있어서는 C 이전에 나온 언어라 C 나 C++ 과 비슷한 면도 있고 다른 면도 있습니다.
일례로 , 단순한 코드만 보더라도 C 와는 다른 부분이 있습니다.

void exampleFunc(int input1, int*output1)
{
    int retVal = input1 * 100;
    *output1 = retVal;
}

procedure exampleFunc(input1:integer; var output1:integer;);
var
    retVal : integer;
begin
    retVal := input1 * 100;
    output1 := retVal;
end;

코드상으로 보면 두 언어의 차이는 좀 더 파스칼이 길고 복잡해 보이는 면이 있을 것 입니다.
하지만 일반적으로 VisualBasic 과 비슷한게 아니냐는 오해를 살수 없다는 점은 , 파스칼은 C 나 C++ 과 같이 포인터의 사용이 비교적 자유롭게 사용이 가능하고(C 나 C++ 에 비하면 매우 제한적이긴 합니다), 컴파일 속도가 매우 빠르다는 장점이 있습니다.

또한 델파이 특성으로 static build 시 , MFC 에 비해 훨씬 적은 바이너리 크기를 제공할 수 있는 장점이 있습니다.

또한 이 외에도 MFC 에 해당하는 VCL 라이브러리를 안쓰고 Windows32.API 함수만을 이용해서 윈도우를 만들고 제어 할 수 있습니다. 즉, Win32.API를 사용한 C 바이너리와, win32.API를 사용한 Pascal 바이너리는 거의 동일한 크기로 만들어 진다는 것등으로 인해 결과물에 있어서는 크게 차이가 없을 수 도 있다는 점 입니다.

하지만 개인적으로는 MFC 와 VCL 을 출력바이너리 크기 및 성능을 비교해 본다면 일단 저로서는 VCL에 손을 들고 싶습니다.

서로의 장단점은 있겠지만 C 와 C++ 에 비해 더 빠른 개발시간을 가질 수 있고, IDE 를 통한 윈도우 컴퍼넌트 디자인 등의 빠른 이점 으로 인해 모르는 분들에게는 다음과 같이 설명을 해 드리는 편 입니다.
Visual Studio 에 있는 Visual Basic 의 편리한 기능들을 C++ 에 적용한 듯한.
사실 델파이는 그냥 델파이 입니다만 국내에서는 C 와 C++ 은 알아도 델파이를 아는 경우는 좀 적은 편이라 설명을 하자면 이런 방법 말고는 없는 것 같더군요.

제목에서는 델파이 그 이전에 파스칼 이라고 한 이유는 C++ 을 하려면 적어도 C 문법은 알아야 하기에 쓴 제목이라 하겠습니다. 델파이를 쓰려면 파스칼 문법을 알아야 합니다.
파스칼 문법은 C 에 비해 매우 정확한 데이터 형의 교환을 해야 하며 , 포인터 조차도 C 처럼 typecast 만으로는 재정의 사용이 어렵습니다.
하지만 파스칼 문법을 통해서 얻을 수 있는 장점이라면 정확한 데이터형의 정의로 인해 남용되는 포인터 캐스팅을 줄일 수 있는 습관과 메모리상에 존재하는 데이터의 다른 방법으로서의 접근 등을 암 으로서 좀 더 넓은 시야를 가질 수 있다는 점 입니다.

또한 델파이에서 되는건 C와 C++ 에서도 되는 것 이고.
C 와 C++ 에서도 되는건 델파이에서도 되는 것이라는 점 입니다.

문법상이나 소스의 변환의 어려움 등으로 인해 GCC 나 Visual-C++ 등으로 만들어진 DLL 을 델파이에서 import 해서 얼마든지 쓸 수 있으며 (보통 call type 을 저는 stdcall 로 추천하는 편 입니다), 이를 통해 다양한 언어로 만들어진 복합적인 프로그램을 생산 해 내어 기능별 분리를 통해 다양한 작업을 할 수도 있습니다.

또한 x86 에 한하는 점 이겠습니다만, 인라인 어셈블러의 사용에 대한 편의성으로 인해 오히려 다른 언어로 만들어진 어플리케이션 보다 더욱 더 빠른 퍼퍼먼스를 내는 경우도 있습니다.

이전에 인기를 끌었던 사사미2K, KMplayer 등은 모두 델파이로 만들어진 미디어 재생기 이며, 이 미디어 재생기들을 통해 이미 다른 언어로 만들어진 플러그인과의 조합의 가능성 등은 입증된지 오래 전 이라 하겠습니다.

연령으로 따지면 C 와 C++ 보다 더 오래된 언어 이고 , 좀더 고차원적인 이유로 마치 베이직을 쓰는 듯한 느낌이 들 수도 있지만 그만큼 사용이 편리하고 C 와 C++ 을 함께 사용할 경우 더욱 더 파워풀 해 지는 언어라 할 수 있겠습니다.

다만 델파이와 C/C++ 을 함께 사용하다 보면 문법적인 차이점으로 인해 혼용되어 서로 오류를 만드는 경우도 있긴 합니다만 이는 과도기일 뿐 두 언어에 대한 상이한 차이점에 대한 제대로 된 이해를 거치게 되면 그로 인해 생기는 시너지와 파워는 매우 놀랍다고 할 수 있다고 생각 됩니다.

또한 상용 어플리케이션 개발에도 전혀 지장이 없는 TurboDelphi2006 explorer 버젼을 CodeGear 사에서 무료로 제공하고 있는 편의성으로 인해 누구나 Windows 개발자가 되 볼 수 있는 기회가 있다는 점도 좋은 점 이라 하겠습니다.
물론 GCC 와 같은 GNU-GPL 컴파일러가 있듯이 델파이도 이와 비슷한 FPC (Free Pascal Compiler) 가 존재 하고 있어서 컴파일러에 있어서는 C 에 못지 않게 선택권을 가질 수 도 있습니다.
FPC 같은 경우는 x86 만이 아닌 ARM 계열도 지원하므로 좀 더 넓은 플랫폼 개발 영역을 가지는 장점도 있습니다.

다만 아쉬운 점은 C/C++ 로 만들어진 LIB 과 델파이로 만들어진 LIB 이 서로 호환되지 않는 점이 앞으로의 개선사항에 서로 포함되었으면 하지만 .. 현실성은 매우 떨어져 불가능 할 것이란 게 아쉽다고 할 수 있곘습니다.

다음부터는 간단한 예제를 통해 C와 C++ 에 익숙한 사람들인 경우 더욱 더 빨리 델파이에 대해 이해하고 습득 할 수 있도록 강의를 준비 해 보도록 하겠습니다.

델파이에 대한 좀 더 자세한 정의는 위키피디아의 정보를 확인 해 보시는 것을 추천 드리는 바 입니다.

감사합니다.