델파이는 인프라이즈(옛날의 볼랜드)사에서 만든 RAD(Rapid Application Development)도구 입니다. 이와 비슷한 것으로는 마이크로소프트사의 비주얼 베이직(Visual Basic)이 있습니다. 델파이는 비주얼 베이직과는 달리 오브젝트 파스칼에 기반을 두고 있습니다.따라서 파스칼 언어를 알아야 합니다.
Delphi는 우리나라에서 판매된 시점은 1995년경이었고, 당시 비슷한 언어로는
Visual Basic 3.0이 있었다.Delphi는 Object Pascal Language를 사용했는데, 이것은
마이크로소프트사가 QBASIC을 이용한 확장개념의 언어로 Visual Basic 3.0을 만들었기때문에,
볼랜드사는 당연히 교육용 언어로 가장 많은 사용자층을 얻고 있는 터보 파스칼7.0의 확장개념으로
Delphi를 만든것이다.
델파이는 빠르고 독립가능한 실행 파일을 만들수 있으며 특히 데이터 관련 프로그램개발에 아주 강력한 성능을 발휘합니다.SQL언어를 지원하여 더욱 강력한 데이터 베이스 관련 프로그램을 제작할 수 있도록 해 줍니다.
델파이는 고대 그리스 신화의 성전을 나타내는 말로..
델파이는 1.0부터 나왔는데 1.0은 윈도우 3.1버전이었고 2.0이 되면서 윈도우95버전으로 나오게 되었고,3.0이 출시되어서 2.0에서 있었던 단점을 보완하고 인터넷 관련 콤포넌트가 추가 됨에 따라 인터넷 관련 프로그램도 쉽게 작성할 수 있게 되었습니다. 델파이 4.0, 5.0을 거쳐서 근래에는 Delhpi 6.0이 출시 예정중이고. 리눅스용 델파이도 나왔답니다.
델파이는 비주얼 c++과 같은 도구들은 물론이고 같은 종류의 비주얼 도구인 비주얼 베이직과 파워빌더 등에 비해서도 많은 장점을 가지고 있는 훌륭한 도구입니다. 우선 델파이를 사용하면 응용 프로그램들을 쉽고 빠르게 개발할 수 있습니다. 비주얼 c++의 경우엔 폼이나 버튼등을 생성할 때 일일이 코딩을 해서 작업을 해야 합니다. 그러나 델파이에선 마우스를 이용해서 컴포넌트를 생성하고 폼에 배치하는 방식으로 프로그램을 작성할 수 있으므로 배우고 사용하기 편리 한 것은 물론이고 작업량을 줄일 수도 있습니다.
그리고 델파이에서 컴포넌트나 폼의 속성을 바꾸게되면 관련된 코드의 내용이 자동으로 바뀝니다. 반대로, 소스 코드를 수정하면 관련된 컴포넌트나 폼의 속성이 변합니다. 프로그램을 수정하더라도 관련된 프로그램의 다른 부분이 즉이 변하므로 프로그램 개발이 쉬워집니다.
마지막으로 델파이는 오브젝트 파스칼을 사용하고 있습니다. 오브젝트 파스칼은 객체 지향형 언어입니다. 객체 지향형 언어는 일반적으로 캡슐화, 상속성, 다양성 의 세가지 개념을 지원하는 언어를 말합니다. 오브젝트 파스칼 역시 이런 세가지 개념을 완벽하게 지원하고 있습니다.
소프트웨어 공학 측면에서의 프로그래밍 방법으로 1970년대를 휩쓴 용어가 구조적 프로그래밍(structured programming)이라면 1980년대에 유행한 용어는 객체 지향 프로그래밍(object-oriented programming:OOP)이라 할 수 있다.
이러한 프로그래밍 방법의 변화는 하드웨어가 매우 빠른 속도로 발전하며 생산성과 재사용성이 높은데 비하여 상대적으로 소프트웨어는 그렇지 못하기 때문에 또 다른 방법을 모색한 데서 비롯되었다.
객체 지향 프로그래밍 방법은 인간이 문제를 해결하는 방법과 유사한점이 많아 대형 프로그램의 작성이 용이하며, 구조적 프로그램보다 프로그램을 읽기가 쉽다는 장점이 있다.
객체 지향 프로그래밍은 계산에 의한 방법이 아니라 처리 방법과 자료가 하나의 묶음으로 이루어져 자료 추상화의 개념을 이용한 프로그래밍 방법을 통틀어 절차 지향 프로그래밍 (procedure-oriented programming)이라고 하는 의미와 대비해 보면 이해하기가 쉽다. 절차 지향 프로그래밍은 프로시저가 주체이고 자료가 객체가 되어 프로시저의 호출, 자료의 전달, 프로시저의 실행으로 문제를 해결하는데 반하여, 객체 지향 프로그래밍(OOP)은 객체(object)가 주체가 되어 객체들 사이에 메시지 전달(message-passing)로 문제를 해결한다는 이른바 '행위자 이론(actor-theory)' 에 그 이론적 배경을 두고 있다.
객체 지향이란 말은 Norway의 Kristem Nygaard가 Simula 67프로그래밍 언어를 개발하면서 객체라른 개념을 사용한데서 유래하였다. Simula 67에서는 전체 프로그램을 여러 객체들의 집합이라고 정의하고 있으며, 객체들의 공통적인 특성들을 묶을 수 있는 클래스(class)라는 개념도 사용하고 있다. 이 언어는 시스템 기술과 시뮬레이션의 두 분야에 사용될 목적으로 개발을 시작하는데, 시스템 기술에서 필요한 정보의 자유로운 입출력 기능으로 대화적 프로그램의 수행을 가능하게 하였다. 결국 Simula 67은 여러 응용 분야에서 사용될 수 있는 일반 프로그래밍 언어로 발전하게 되었으며, 그후 Xerox사에서는 이 개념을 발전시며 Smalltalk 72와 Smalltalk 80을 개발하였는데, Simula에서 사용되었던 객체, 클래스, 그리고 서브클래스(subclass)등의 여러 개념을 일관성있고 통일적인 방법으로 정리하고 구현함으로써 객체 지향 프로그래미으이 개념을 확고히 하였다. 현재의 객체 지향 프로그래밍의 개념이 여러 변형된 방향으로 연구되고 있지만 객체 지향 프로그래밍 개념의 기본은 Smalltalk에서 출발한다고 볼 수 있다.
"객체의 기본적인 개념은 무엇인가?"라는 질문에 대하여 Nygaard는 객체를 시스템의 한 구성 요소로서 일정한 행위를 할 수 있는 한 단위라고 보고 있다. 따라서 객체 지향 프로그래밍에서 정보가 처리되는 과정은 "시스템 상태의 변화(transformation)"이며, 객체는 시스템을 구성하는 실체로서 각 객체는 한 구성 요소의 특성과 상태의 변화를 표현하는 한 단위라고 정의한다. 정보 처리에 의한 시스템의 상태 변화는 각 객체들에 의한 행위에 의하여 이루어진다고 보고 있다.
또한 객체 지향 언어를 여러 가지 부류로 구분하는데, 엄밀히 말하면 객체 지향 언어란 객체, 클래스, 그리고 상속(inheritance)의 세 가지 기능을 지원하는 언어를 의미한다. 근본적인 시각에서 이 세 가지 개념의 의미를 관찰할 때, 객체는 캡슐화(encapsulation) 및 자료 추상화 (data abstraction)를 지원하는 하나의 기법이ㅏㄷ. 클래스는 자료형 이론의 한 도구이고, 상속은 특수화(specialization)와 일반화(generalization)의 두 원칙에 따라 정보를 표현하고 조직화 (organize)하는 방법이다. 그러나 이 세 가지 개념이 유일하거나 필수적인 것은 아니며 다른 형태의 구현 방법이 존재할 수도 있다.
Delphi의 객체지향... 음냐.
(1) 객체(object)
프로그램은 현실 세계를 추상화한 모델로서 현실 세계에서 행동하는 주체인 대상을 객체 지향 프로그래밍에서는 객체라고 부른다. 따라서 우리가 처리할 업무, 세분화된 업무, 사소한 자료까지도 모두 객체로 본다.
예를 들면, 평균을 구할 때에 평균, 평균에 사용되는 자료들 모두가 객체인 것이다.
이 객체는 절차 지향 프로그래밍 언어에서의 자료와는 의미가 다르다.
어떤 회사를 프로그램에 비유할 때 객체는 그 회사의 어느 부서에 해당된다. 그 부서는 조직과 담당 업무로 파악될 수 있다.
객체는 전용 자료와 메소드로 구성되는데, 전용 자료는 객체의 물리적 구성 요소이고 메소드는 객체의 행위(operation)이다. 즉, 절차 지향 언어에서의 자료와 알고리즘에 각각 대응되는데, 그 차이점은 절차 지향언어에서의 자료는 지각이 없는 자료 자체이지만 객체 지향 언어에서의 객체는 자기의 해우리를 알고 있는[또는 정의된] 실체인 것이다.
회사의 부서는 그 업무를 알고 있으므로 지시를 받으면 활동하듯이 객체는 그 메소드를 알고 있으므로 메시지를 받으면 행동한다.
(2)클래스(class)
클래스는 하나 이상의 유사한 객체들을 묶어서 하나의 공통된 특성을 표현한 것으로 자료 추상화의 개념으로 볼 수 있다. 상대적으로 객체는 클래스로부터 만들어진 실체(instance)인 것이다. 따라서, 클래스는 절차 지향 언어의 자료형에 해당된다고 볼 수 있다. 예를 들면, 정수, 남자, 사람 등은 하나의 클래스이고, 정수 중에서 3, 남자 중에서 홍길동은 그들 클래스에 대한 실체로서 객체이다. 또한 이러한 클래스들은 계층(hierarchy)구조를 가질 수 있는데, 예를 들어 회사의 각 부서나 수, 생물, 행정 구역의 경우처럼 프로그램의 상황에 따라 객체가 계층적으로 분류되어야 하는 경우 그 객체가 클래스들을 계층 구조로 구성할 수 있다.
여기서, 클래스들이 계층 구조로 관계되어져 있을 때, 어떤 한 클래스를 기준으로 하여 그 기준 클래스의 바로 위의 클래스를 슈퍼 클래스(suepr class), 아래의 클래스를 서브클래스(subclass)라고 한다. 예를 들면, 군의 슈퍼 클래스는 도, 서브클래스는 면, 읍이다.
(3)실체(instance)
정수형 상수 -3, 0, 76 등은 정수라는 클래스에 속하는 실체들이다. 즉, 실체는 어떤 클래스에 속하는 구체적인 객체이다. 위에서 경기도, 강원도, 제주도 등은 도의 실체이고, 가평군, 동래군, 북제주군은 군의 실체이다.
(4)메시지(message)
객체에게 어떤 행위를 하도록 지시하는 명령을 메시지라고 한다. 이 메시지들을 객체들 간에 주고 받음으로써 프로그램이 실행되는 것이다. 메시지를 보내는 객체를 송신자(sender).fk 하고, 메시지를 받는 객체를 수신자(receive)라고 하는데, 수신자는 자기가 모르고 있는 메시지를 받으면 특수한 경우를 제외하고는 프로그램 오류를 유발시킨다.
(5)메소드(method)
메소드란 객체가 메시지를 받아 실행해야 할 객체의 구체적인 연산을(operation) 을 정의한 것이다. 객체작 메소드에 정의된 형식[멧지 패턴]에 맞는 메시지를 받으면 연산 행위가 정의된 메소드대로 실행한다. 하나의 객체에는 한 개 이상의 메소드를 정의 할 수 있는데, 예를 들면 누기라는 메소드를 정의할 수 있다. 이와 같이 어떤 클래스의 메소드들의 집합을 클래스 프로토콜(protocol)이라 하며, 이에 대한 실체를 생성했을때에도 프로토콜은 동일하게 정의된다.
결론적으로,객체 지향 프로그래밍은 프로그램의 연산 체게를 추상화하여 객체를 실체로 만들고 메시지 전달로서 자료를 처리한다는 자연스러운 은유법을 채용했다고 할 수 있으며, 소프트웨어의 재사용(reusability)과 확장성(extendibility), 그리고 적용성(compatibility)을 중시한 프로그래밍 기법으로 받아들여진다.
객체 지향 프로그래밍은 객체와 메소드를 정의한 후에 메시지를 보내는 일련의 과정을 서술하는 것으로 표현된다. 객체 지향 언어, 특히 smalltalk에서 추구하는 매우 중요한 개념들이 있는데, 이들은 다음과 같다.
(1)추상화(abstration)
주어진 문제를 해결하기 위하여 우선해야 할 일은 객체를 그 구조, 속성, 기능에 따라 해당 클래스를 분류해야 하는데, 이를 분류(classification)라고 한다. 먼저 객체의 성질을 분해하는 일을 요소 분해(factoring)라 하며 공통된 성질을 추출하여 슈퍼 클래스를 설정하는 일을 추상화(abstration)라고 한다. 예를 들면, 자동차와 말이란 클래스에서 '타는 것'이란 클래스를 만드는 일이 추상화에 속한다.
반대로 '타는 것'에서 비행기라는 클래스를 생각해내는 것을 특수화(spcialization)라고 하며, '타는 것'이라는 클래스에서 자동차, 말, 비행기 등의 여러 개의 서브클래스로 분류하는 것을 서브클래싱(subclassing)이라고 한다.
추상화에는 기능 추상화와 자료 추상화가 있는데, 절차 지향 프로그래밍 언어에서의 기능 추상화는 함수와 같은 부프로그램을 정의하는 것이고, 자료 추상화는 추상 자료형을 정의하는 것이다. 추상 자료형은 시스템 자료형을 이용하여 사용자 정의 자료형(user-defined type)을 정의하는 것 뿐만 아니라 조작하는 연산을 함께 정의하는 것도 포함된다. 객체 지향 프로그래밍 언어에서의 기능 추상화는 메소들 정의하는 것이고, 자료 추상화는 객체가 속하는 클래스를 설정하는 것이다. 결국 클래스는 추상화를 구현하는 기본이라고 할 수 있다.
(2)캡슐화(encapsulation)
객체는 캡슐 단위로 이루어지는데 유사한 객체를 묶어 클래스를 정의하는데 캡슐화가 사용된다. 캡슐화란 소프트웨어 공학에서 말하는 정보은닉(information hiding)에 해당되는 것으로서 사용자에게는 상세한 구현을 감추고 필요한 사항만 보이게 하는 원칙인데, 절차 언어에서 모듈을 블랙 박스(block-box)화하는 개념과 같다고 볼 수 있다. 이 캡슐화는 객체의 전용 자료와 메소드를 다른 객체가 접근할 수 없다는 의미로, 회사에 비유하면 자재과에서는 판매과의 조직에 관여하거나 판매과의 업무를 수행할 수 없다는 것이다. 따라서, 꼭 필요한 작업의 처리가 요구되면 해당 처리 과정을 가지고 있는 객체, 또는 슈퍼 클래스를 통해서만 이루어질 수 있다는 제약이 가해진다.
문제를 해결하기 위해서 객체는 반드시 캡슐화의 방법으로만 사용하고, 크래스의 실체로서 정의되어야만 한다.
(3)상속(inheritance)
클래스 계층 구조에서는 상위 클래스로 갈수록 보다 더 추상화된 형태이므로 그 서브클래스들은 상위 클래스가 가진 속성을 그대로 물려받을 수 있다. 이러한 개념을 상속이라고 하는데, 이 말은 슈퍼 클래스가 가지고 있는 속성인 전용 자료와 메소드를 서브클래스에서 접근할수 있다는 의미이다.
즉 여러 개의 슈퍼 클래스로부터 상속을 허용하는 것을 다중 상속(multiple inheritance) 이라고 하며, Smalltalk처럼 오늘날의 많은 객체 지향 언어에서는 이 다중 상속을 허용하고 있다. 이상과 같은 추상화, 서브클래스 개념, 그리고 상속의 성질을 이용하여 메소드가 서로 중첩되지 않도록 함으로써 프로그래밍의 코딩양과 노력을 절약하는 프로그래밍 기법을 차분 프로그래밍 (differential programming)이라고 한다.
(4)다중 기능(polymorhism)
하위 클래스에서 상위 클래스의 메소들 중에서 일부 또는 전부가 상속되는 것을 원하지 않을 때는 상위 클래스의 동일한 명칭의 메소드를 하위 클래스에서 재정의할 수 있으며, 이 하위 클래스에서 재정의된 메소드가 상위 클래스의 메소드보다 우선한다. 이것은 블록 언어에서 식별자 영역의 개념과 동일하다.
동일한 메시지라도 메소드가 정의되어 있는 수신자가 누구인가에 따라 각각 다른 기능을 수행하는 것을 다중 기능(palymorphism)이라 한다. 물론 하위 클래스에서 정의되지 않은 경우에는 상속에 의해 상위 클래스의 메소드를 이용하게 된다. 절차 지향 언어에서는 이러한 성질을 중복 표현(overloading)이라고도 한다.
컴퓨터의 발전은 놀라울 정도로 빠르게 진행되어 왔다. 오늘날의 펜티엄 컴퓨터가 나오기까지 얼마나 많은 컴퓨터가 세상에 나왔다가 사라졌는가? 이와 함께 컴퓨터 프로그램 언어 또한 굉장히 많은 언어들이 세상에 나왔다가 사라졌다. 초창기에는 수치계산 위주의 기호 어셈블리어 등이 나타났으며, 이후에 자료처리용 언어인 FORTRAN, ALGOL60, COBOL, LISP 등이 나타나 수치계산용 언어와 병립하여 발전하다가 PL/1, ALGOL68, SNOBOL4, PASCAL, APL, BASIC 등이 나타나면서 수치계산과 자료처리를 병합하게 되었다. 이후 컴퓨터의 발전과 함께 효율이 떨어지는 언어들은 도태되고, 꾸준한 개선으로 ALGOL언어는 B언어로 발전하였으며, 이것은 오늘날의 C언어로 다시 발전하였던 것이다. 이 C언어에 OOP(Object Oriented Programming: 객체 지향 프로그래밍)적 요소를 가미시켜 C언어의 C에 증가연산자를 의미하는 “++”를 붙여 C++이란 언어가 탄생되었으며, 운영체제가 텍스트기반의 DOS에서 GUI(Graphic User Interface)와 Multitasking을 지원하는 윈도우즈로 발전하면서 Visual이라는 개념을 포함시켜 능률성을 높인 Visual C++이란 언어로 발전하였다. BASIC언어는 기초 교육용으로 사용되다가 시대의 흐름에 맞게 Visual Basic이란 언어로 탄생되었다. PASCAL언어는 OOP(Object Oriented Programming: 객체 지향 프로그래밍)적 요소를 가미하여 Object Pascal이란 언어로 발전하였으며, 이에 Visual개념을 첨가하여 탄생된 언어가 바로 Delphi란 언어이다. 물론 이외에도 수많은 언어들이 세상에 나왔지만 거의 대부분이 도태되어 자신의 존재를 널리 알리지도 못하고 사장되었다. 이것은 프로그램 언어도 시장성이 중요함을 나타내며, 사용자들의 외면을 받게 된다면 곧 사장됨을 의미한다. 그래서 프로그램 언어 개발자들은 많은 사용자들이 사용할 수 있게 하기 위하여 기능성 못지않게 편이성을 강조하게 되었다.
그로 인하여 앞으로의 프로그램 언어의 발전은 전문 프로그래머뿐만이 아니라 일반 사용자들도 워드 프로세서로 문서를 작성하듯이 조금의 노력으로 자기 자신의 업무에 맞는 단순한 프로그램을 직접 만들어 사용할 수 있는 언어를 목표로 발전하게 될 것이다. 이에 추천하는 프로그램 언어가 바로 델파이(Delphi)이다.
> 레포트 자료를 구할려구 오늘 첨 들어와 봤는데요...
> 음..제가 찾는 자료가 없어서요..
> 델파이를 써서 뭐 프로그램을 짜라 뭐 이런 레포트는 아니구요..
> 델파이의 역사에 대해서..그리구 델파이가 현재 쓰이는 분야 뭐 그런거에 대해서요..
> 혹시 알구 계신다면 .....
> ^^
델파이(Delphi)란?
델파이는 인프라이즈(옛날의 볼랜드)사에서 만든 RAD(Rapid Application Development)도구 입니다. 이와 비슷한 것으로는 마이크로소프트사의 비주얼 베이직(Visual Basic)이 있습니다. 델파이는 비주얼 베이직과는 달리 오브젝트 파스칼에 기반을 두고 있습니다.따라서 파스칼 언어를 알아야 합니다.
Delphi는 우리나라에서 판매된 시점은 1995년경이었고, 당시 비슷한 언어로는
Visual Basic 3.0이 있었다.Delphi는 Object Pascal Language를 사용했는데, 이것은
마이크로소프트사가 QBASIC을 이용한 확장개념의 언어로 Visual Basic 3.0을 만들었기때문에,
볼랜드사는 당연히 교육용 언어로 가장 많은 사용자층을 얻고 있는 터보 파스칼7.0의 확장개념으로
Delphi를 만든것이다.
델파이는 빠르고 독립가능한 실행 파일을 만들수 있으며 특히 데이터 관련 프로그램개발에 아주 강력한 성능을 발휘합니다.SQL언어를 지원하여 더욱 강력한 데이터 베이스 관련 프로그램을 제작할 수 있도록 해 줍니다.
델파이는 고대 그리스 신화의 성전을 나타내는 말로..
델파이는 1.0부터 나왔는데 1.0은 윈도우 3.1버전이었고 2.0이 되면서 윈도우95버전으로 나오게 되었고,3.0이 출시되어서 2.0에서 있었던 단점을 보완하고 인터넷 관련 콤포넌트가 추가 됨에 따라 인터넷 관련 프로그램도 쉽게 작성할 수 있게 되었습니다. 델파이 4.0, 5.0을 거쳐서 근래에는 Delhpi 6.0이 출시 예정중이고. 리눅스용 델파이도 나왔답니다.
델파이는 비주얼 c++과 같은 도구들은 물론이고 같은 종류의 비주얼 도구인 비주얼 베이직과 파워빌더 등에 비해서도 많은 장점을 가지고 있는 훌륭한 도구입니다. 우선 델파이를 사용하면 응용 프로그램들을 쉽고 빠르게 개발할 수 있습니다. 비주얼 c++의 경우엔 폼이나 버튼등을 생성할 때 일일이 코딩을 해서 작업을 해야 합니다. 그러나 델파이에선 마우스를 이용해서 컴포넌트를 생성하고 폼에 배치하는 방식으로 프로그램을 작성할 수 있으므로 배우고 사용하기 편리 한 것은 물론이고 작업량을 줄일 수도 있습니다.
그리고 델파이에서 컴포넌트나 폼의 속성을 바꾸게되면 관련된 코드의 내용이 자동으로 바뀝니다. 반대로, 소스 코드를 수정하면 관련된 컴포넌트나 폼의 속성이 변합니다. 프로그램을 수정하더라도 관련된 프로그램의 다른 부분이 즉이 변하므로 프로그램 개발이 쉬워집니다.
마지막으로 델파이는 오브젝트 파스칼을 사용하고 있습니다. 오브젝트 파스칼은 객체 지향형 언어입니다. 객체 지향형 언어는 일반적으로 캡슐화, 상속성, 다양성 의 세가지 개념을 지원하는 언어를 말합니다. 오브젝트 파스칼 역시 이런 세가지 개념을 완벽하게 지원하고 있습니다.
-----------------------------------------------------------
델파이의 역사
-------------------------------------------------------------
<1999. 9. 30> Inprise 리눅스용 델파이 개발
인프라이즈에서 9.28일정식으로 리눅스용 델파이 개발계획을 발표했습니다.
리눅스용 델파이와 C/C++빌더를 내년에 출시할 목표로
'Kylix'라는 프로젝트를 시작했습니다.
여기에는 리눅스용 VCL개발도 포함되어 있습니다.
그리고 윈도우와 리눅스 간의 손쉬운 포팅을 할수 있게 할 계획이라는 군요.
<1999. 7. 19> Inprise 델파이5 공식 발표
Inprise가 차세대 인터넷 환경을 위한 최고의 개발툴 델파이5를
정식 공개 하였습니다. 항간에 MS사의 VISUL STUDIO 와 버전을 맞추기
위해 버전5, 6을 생략하고 바로 델파이7이 나온다는 소문이 있었지만,
공식적으로 델파이5를 출시했습니다. 일본에서 8월경에 출시될 예정이라고 하는 군요.
. Delphi 5 Enterprise는 인터넷 및 분산 컴퓨팅을 지원하는 고성능의 개발 솔루션으로 특히 Delphi의 인터넷 익스프레스는 전자상거래를 지원하는 유연하고 확장 가능한 시스템을 구축하기 위한 웹 클라이언트 페이지 마법사를 포함하고 있습니다.
----------------------------------------------------------------------
델파이의 성능
--------------------------------------------------------------------
+ 컴파일러 속도면에선 델파이는 순수한 컴파일러 방식이기 때문에 다른 RAD계열의 툴보다 속도가 빠르다.
+ 실행파일의 크기가 다른툴에 비해 작다.(별도의 Run-Time 라이브러리가 필요하지 않으므로)
+ 객체-지향 프로그래밍 기법에서 "객체의 캡슐화" - VCL Component
"다형성 지원 " - 메소드 오버라이딩/오버로드와 가상 메소드,
다이나믹 메소드등을 모두 지원
"상속성 지원" - 단일상속성은 지원하지만 다중상속성은 지원 하지않음.
이상 위 세가지 경우를 구현한다.
+ 델파이는 ActiveX,CORBA,COM/DCOM,자체 컨트롤 객체를 개발하거나 사용할수 있다.
+ 델파이는 인터넷 관련 컴포넌트를 지원한다.
- SOCKET : Tclient-Socket, Tsever-Socket
- FTP : TNM-FTP
- SMTP : TNMSMTP
- POP3 : TNMPOP3
- NNTP : TNMS-MTP
- HTTP : TNMS-MTP
- UDP : TUDP
------------------------------------------------------------------------------
델파이 환경 이해
--------------------------------------------------------------------------------
+ IDE(Integrated Development Environment)의 통합 개발 환경
+ 스피트바 : 가장 자주 사용하는 기능을 모아둔 단추
+ Component Palette : 컴포넌트들을 용도에 따라 모아둔 팔레트
+ Form : RAD계열의 언어의 기본요소라고 보면됨. 이미지,버튼등의 화면에 보여지는 요소 정의 *.res
+ Unit : 프로그램이 어떻게 동작할지에 대한 정의. 오브젝트 파스칼문법사용. *.pas
+ 객체란 : 속성(Attribute)와 동작방식(Behavior)로 정의, 속성과 동작방식에 해당하는
Property, Method라는 것을 통해 프로그래밍하는것
+ Project : 폼과 유닛을 총괄
+ 객체 속성창(Object inspector) : 객체항목들을 변경시키거나, 객체가 반응을하게 되는 이벤트를 조정하는데
편리한 인터페이스를 제공하며, 객체 속성창에는 프로그램 설계시 변경
가능한 속성들이 나열되어 있다.
+ DLL의 디버깅 지원 : 통합환경차원에서 DLL의 디버깅을 지원한다.
-------------------------------------------------------------------------------
델파이의 장단점
--------------------------------------------------------------------------------
{ 장 점 }
+ Mukti-Tier DB 아키텍처 마이다스(MIDAS)를 지원한다.(수천개의 클라이언트접속시 병목현상을 해결해 주는기능)
+ CORBA 지원
+ inline Assembly : 프로그램 로딩속도의 최적화
+ 순수한 컴파일러 방식
+ 독자적인 실행파일 : DLL(Dynamic Linked Library)가 없이 독자적 실행
{ 단 점 }
+ 한글 지원이 없다.
+ 자체 분석/설계 모델링 툴이 없다.
+ 로컬 SQL의 테이블 수정이 불가능한 경우가 있다.
------------------------------------------------------------------------
객체지향 프로그래밍이란?
-------------------------------------------------------------------------
소프트웨어 공학 측면에서의 프로그래밍 방법으로 1970년대를 휩쓴 용어가 구조적 프로그래밍(structured programming)이라면 1980년대에 유행한 용어는 객체 지향 프로그래밍(object-oriented programming:OOP)이라 할 수 있다.
이러한 프로그래밍 방법의 변화는 하드웨어가 매우 빠른 속도로 발전하며 생산성과 재사용성이 높은데 비하여 상대적으로 소프트웨어는 그렇지 못하기 때문에 또 다른 방법을 모색한 데서 비롯되었다.
객체 지향 프로그래밍 방법은 인간이 문제를 해결하는 방법과 유사한점이 많아 대형 프로그램의 작성이 용이하며, 구조적 프로그램보다 프로그램을 읽기가 쉽다는 장점이 있다.
객체 지향 프로그래밍은 계산에 의한 방법이 아니라 처리 방법과 자료가 하나의 묶음으로 이루어져 자료 추상화의 개념을 이용한 프로그래밍 방법을 통틀어 절차 지향 프로그래밍 (procedure-oriented programming)이라고 하는 의미와 대비해 보면 이해하기가 쉽다. 절차 지향 프로그래밍은 프로시저가 주체이고 자료가 객체가 되어 프로시저의 호출, 자료의 전달, 프로시저의 실행으로 문제를 해결하는데 반하여, 객체 지향 프로그래밍(OOP)은 객체(object)가 주체가 되어 객체들 사이에 메시지 전달(message-passing)로 문제를 해결한다는 이른바 '행위자 이론(actor-theory)' 에 그 이론적 배경을 두고 있다.
객체 지향이란 말은 Norway의 Kristem Nygaard가 Simula 67프로그래밍 언어를 개발하면서 객체라른 개념을 사용한데서 유래하였다. Simula 67에서는 전체 프로그램을 여러 객체들의 집합이라고 정의하고 있으며, 객체들의 공통적인 특성들을 묶을 수 있는 클래스(class)라는 개념도 사용하고 있다. 이 언어는 시스템 기술과 시뮬레이션의 두 분야에 사용될 목적으로 개발을 시작하는데, 시스템 기술에서 필요한 정보의 자유로운 입출력 기능으로 대화적 프로그램의 수행을 가능하게 하였다. 결국 Simula 67은 여러 응용 분야에서 사용될 수 있는 일반 프로그래밍 언어로 발전하게 되었으며, 그후 Xerox사에서는 이 개념을 발전시며 Smalltalk 72와 Smalltalk 80을 개발하였는데, Simula에서 사용되었던 객체, 클래스, 그리고 서브클래스(subclass)등의 여러 개념을 일관성있고 통일적인 방법으로 정리하고 구현함으로써 객체 지향 프로그래미으이 개념을 확고히 하였다. 현재의 객체 지향 프로그래밍의 개념이 여러 변형된 방향으로 연구되고 있지만 객체 지향 프로그래밍 개념의 기본은 Smalltalk에서 출발한다고 볼 수 있다.
"객체의 기본적인 개념은 무엇인가?"라는 질문에 대하여 Nygaard는 객체를 시스템의 한 구성 요소로서 일정한 행위를 할 수 있는 한 단위라고 보고 있다. 따라서 객체 지향 프로그래밍에서 정보가 처리되는 과정은 "시스템 상태의 변화(transformation)"이며, 객체는 시스템을 구성하는 실체로서 각 객체는 한 구성 요소의 특성과 상태의 변화를 표현하는 한 단위라고 정의한다. 정보 처리에 의한 시스템의 상태 변화는 각 객체들에 의한 행위에 의하여 이루어진다고 보고 있다.
또한 객체 지향 언어를 여러 가지 부류로 구분하는데, 엄밀히 말하면 객체 지향 언어란 객체, 클래스, 그리고 상속(inheritance)의 세 가지 기능을 지원하는 언어를 의미한다. 근본적인 시각에서 이 세 가지 개념의 의미를 관찰할 때, 객체는 캡슐화(encapsulation) 및 자료 추상화 (data abstraction)를 지원하는 하나의 기법이ㅏㄷ. 클래스는 자료형 이론의 한 도구이고, 상속은 특수화(specialization)와 일반화(generalization)의 두 원칙에 따라 정보를 표현하고 조직화 (organize)하는 방법이다. 그러나 이 세 가지 개념이 유일하거나 필수적인 것은 아니며 다른 형태의 구현 방법이 존재할 수도 있다.
Delphi의 객체지향... 음냐.
(1) 객체(object)
프로그램은 현실 세계를 추상화한 모델로서 현실 세계에서 행동하는 주체인 대상을 객체 지향 프로그래밍에서는 객체라고 부른다. 따라서 우리가 처리할 업무, 세분화된 업무, 사소한 자료까지도 모두 객체로 본다.
예를 들면, 평균을 구할 때에 평균, 평균에 사용되는 자료들 모두가 객체인 것이다.
이 객체는 절차 지향 프로그래밍 언어에서의 자료와는 의미가 다르다.
어떤 회사를 프로그램에 비유할 때 객체는 그 회사의 어느 부서에 해당된다. 그 부서는 조직과 담당 업무로 파악될 수 있다.
객체는 전용 자료와 메소드로 구성되는데, 전용 자료는 객체의 물리적 구성 요소이고 메소드는 객체의 행위(operation)이다. 즉, 절차 지향 언어에서의 자료와 알고리즘에 각각 대응되는데, 그 차이점은 절차 지향언어에서의 자료는 지각이 없는 자료 자체이지만 객체 지향 언어에서의 객체는 자기의 해우리를 알고 있는[또는 정의된] 실체인 것이다.
회사의 부서는 그 업무를 알고 있으므로 지시를 받으면 활동하듯이 객체는 그 메소드를 알고 있으므로 메시지를 받으면 행동한다.
(2)클래스(class)
클래스는 하나 이상의 유사한 객체들을 묶어서 하나의 공통된 특성을 표현한 것으로 자료 추상화의 개념으로 볼 수 있다. 상대적으로 객체는 클래스로부터 만들어진 실체(instance)인 것이다. 따라서, 클래스는 절차 지향 언어의 자료형에 해당된다고 볼 수 있다. 예를 들면, 정수, 남자, 사람 등은 하나의 클래스이고, 정수 중에서 3, 남자 중에서 홍길동은 그들 클래스에 대한 실체로서 객체이다. 또한 이러한 클래스들은 계층(hierarchy)구조를 가질 수 있는데, 예를 들어 회사의 각 부서나 수, 생물, 행정 구역의 경우처럼 프로그램의 상황에 따라 객체가 계층적으로 분류되어야 하는 경우 그 객체가 클래스들을 계층 구조로 구성할 수 있다.
여기서, 클래스들이 계층 구조로 관계되어져 있을 때, 어떤 한 클래스를 기준으로 하여 그 기준 클래스의 바로 위의 클래스를 슈퍼 클래스(suepr class), 아래의 클래스를 서브클래스(subclass)라고 한다. 예를 들면, 군의 슈퍼 클래스는 도, 서브클래스는 면, 읍이다.
(3)실체(instance)
정수형 상수 -3, 0, 76 등은 정수라는 클래스에 속하는 실체들이다. 즉, 실체는 어떤 클래스에 속하는 구체적인 객체이다. 위에서 경기도, 강원도, 제주도 등은 도의 실체이고, 가평군, 동래군, 북제주군은 군의 실체이다.
(4)메시지(message)
객체에게 어떤 행위를 하도록 지시하는 명령을 메시지라고 한다. 이 메시지들을 객체들 간에 주고 받음으로써 프로그램이 실행되는 것이다. 메시지를 보내는 객체를 송신자(sender).fk 하고, 메시지를 받는 객체를 수신자(receive)라고 하는데, 수신자는 자기가 모르고 있는 메시지를 받으면 특수한 경우를 제외하고는 프로그램 오류를 유발시킨다.
(5)메소드(method)
메소드란 객체가 메시지를 받아 실행해야 할 객체의 구체적인 연산을(operation) 을 정의한 것이다. 객체작 메소드에 정의된 형식[멧지 패턴]에 맞는 메시지를 받으면 연산 행위가 정의된 메소드대로 실행한다. 하나의 객체에는 한 개 이상의 메소드를 정의 할 수 있는데, 예를 들면 누기라는 메소드를 정의할 수 있다. 이와 같이 어떤 클래스의 메소드들의 집합을 클래스 프로토콜(protocol)이라 하며, 이에 대한 실체를 생성했을때에도 프로토콜은 동일하게 정의된다.
결론적으로,객체 지향 프로그래밍은 프로그램의 연산 체게를 추상화하여 객체를 실체로 만들고 메시지 전달로서 자료를 처리한다는 자연스러운 은유법을 채용했다고 할 수 있으며, 소프트웨어의 재사용(reusability)과 확장성(extendibility), 그리고 적용성(compatibility)을 중시한 프로그래밍 기법으로 받아들여진다.
객체 지향 프로그래밍은 객체와 메소드를 정의한 후에 메시지를 보내는 일련의 과정을 서술하는 것으로 표현된다. 객체 지향 언어, 특히 smalltalk에서 추구하는 매우 중요한 개념들이 있는데, 이들은 다음과 같다.
(1)추상화(abstration)
주어진 문제를 해결하기 위하여 우선해야 할 일은 객체를 그 구조, 속성, 기능에 따라 해당 클래스를 분류해야 하는데, 이를 분류(classification)라고 한다. 먼저 객체의 성질을 분해하는 일을 요소 분해(factoring)라 하며 공통된 성질을 추출하여 슈퍼 클래스를 설정하는 일을 추상화(abstration)라고 한다. 예를 들면, 자동차와 말이란 클래스에서 '타는 것'이란 클래스를 만드는 일이 추상화에 속한다.
반대로 '타는 것'에서 비행기라는 클래스를 생각해내는 것을 특수화(spcialization)라고 하며, '타는 것'이라는 클래스에서 자동차, 말, 비행기 등의 여러 개의 서브클래스로 분류하는 것을 서브클래싱(subclassing)이라고 한다.
추상화에는 기능 추상화와 자료 추상화가 있는데, 절차 지향 프로그래밍 언어에서의 기능 추상화는 함수와 같은 부프로그램을 정의하는 것이고, 자료 추상화는 추상 자료형을 정의하는 것이다. 추상 자료형은 시스템 자료형을 이용하여 사용자 정의 자료형(user-defined type)을 정의하는 것 뿐만 아니라 조작하는 연산을 함께 정의하는 것도 포함된다. 객체 지향 프로그래밍 언어에서의 기능 추상화는 메소들 정의하는 것이고, 자료 추상화는 객체가 속하는 클래스를 설정하는 것이다. 결국 클래스는 추상화를 구현하는 기본이라고 할 수 있다.
(2)캡슐화(encapsulation)
객체는 캡슐 단위로 이루어지는데 유사한 객체를 묶어 클래스를 정의하는데 캡슐화가 사용된다. 캡슐화란 소프트웨어 공학에서 말하는 정보은닉(information hiding)에 해당되는 것으로서 사용자에게는 상세한 구현을 감추고 필요한 사항만 보이게 하는 원칙인데, 절차 언어에서 모듈을 블랙 박스(block-box)화하는 개념과 같다고 볼 수 있다. 이 캡슐화는 객체의 전용 자료와 메소드를 다른 객체가 접근할 수 없다는 의미로, 회사에 비유하면 자재과에서는 판매과의 조직에 관여하거나 판매과의 업무를 수행할 수 없다는 것이다. 따라서, 꼭 필요한 작업의 처리가 요구되면 해당 처리 과정을 가지고 있는 객체, 또는 슈퍼 클래스를 통해서만 이루어질 수 있다는 제약이 가해진다.
문제를 해결하기 위해서 객체는 반드시 캡슐화의 방법으로만 사용하고, 크래스의 실체로서 정의되어야만 한다.
(3)상속(inheritance)
클래스 계층 구조에서는 상위 클래스로 갈수록 보다 더 추상화된 형태이므로 그 서브클래스들은 상위 클래스가 가진 속성을 그대로 물려받을 수 있다. 이러한 개념을 상속이라고 하는데, 이 말은 슈퍼 클래스가 가지고 있는 속성인 전용 자료와 메소드를 서브클래스에서 접근할수 있다는 의미이다.
즉 여러 개의 슈퍼 클래스로부터 상속을 허용하는 것을 다중 상속(multiple inheritance) 이라고 하며, Smalltalk처럼 오늘날의 많은 객체 지향 언어에서는 이 다중 상속을 허용하고 있다. 이상과 같은 추상화, 서브클래스 개념, 그리고 상속의 성질을 이용하여 메소드가 서로 중첩되지 않도록 함으로써 프로그래밍의 코딩양과 노력을 절약하는 프로그래밍 기법을 차분 프로그래밍 (differential programming)이라고 한다.
(4)다중 기능(polymorhism)
하위 클래스에서 상위 클래스의 메소들 중에서 일부 또는 전부가 상속되는 것을 원하지 않을 때는 상위 클래스의 동일한 명칭의 메소드를 하위 클래스에서 재정의할 수 있으며, 이 하위 클래스에서 재정의된 메소드가 상위 클래스의 메소드보다 우선한다. 이것은 블록 언어에서 식별자 영역의 개념과 동일하다.
동일한 메시지라도 메소드가 정의되어 있는 수신자가 누구인가에 따라 각각 다른 기능을 수행하는 것을 다중 기능(palymorphism)이라 한다. 물론 하위 클래스에서 정의되지 않은 경우에는 상속에 의해 상위 클래스의 메소드를 이용하게 된다. 절차 지향 언어에서는 이러한 성질을 중복 표현(overloading)이라고도 한다.
--------------------------------------------------------------------------------
마치며, 왜 델파이를 배워야 하는가?
--------------------------------------------------------------------------------
컴퓨터의 발전은 놀라울 정도로 빠르게 진행되어 왔다. 오늘날의 펜티엄 컴퓨터가 나오기까지 얼마나 많은 컴퓨터가 세상에 나왔다가 사라졌는가? 이와 함께 컴퓨터 프로그램 언어 또한 굉장히 많은 언어들이 세상에 나왔다가 사라졌다. 초창기에는 수치계산 위주의 기호 어셈블리어 등이 나타났으며, 이후에 자료처리용 언어인 FORTRAN, ALGOL60, COBOL, LISP 등이 나타나 수치계산용 언어와 병립하여 발전하다가 PL/1, ALGOL68, SNOBOL4, PASCAL, APL, BASIC 등이 나타나면서 수치계산과 자료처리를 병합하게 되었다. 이후 컴퓨터의 발전과 함께 효율이 떨어지는 언어들은 도태되고, 꾸준한 개선으로 ALGOL언어는 B언어로 발전하였으며, 이것은 오늘날의 C언어로 다시 발전하였던 것이다. 이 C언어에 OOP(Object Oriented Programming: 객체 지향 프로그래밍)적 요소를 가미시켜 C언어의 C에 증가연산자를 의미하는 “++”를 붙여 C++이란 언어가 탄생되었으며, 운영체제가 텍스트기반의 DOS에서 GUI(Graphic User Interface)와 Multitasking을 지원하는 윈도우즈로 발전하면서 Visual이라는 개념을 포함시켜 능률성을 높인 Visual C++이란 언어로 발전하였다. BASIC언어는 기초 교육용으로 사용되다가 시대의 흐름에 맞게 Visual Basic이란 언어로 탄생되었다. PASCAL언어는 OOP(Object Oriented Programming: 객체 지향 프로그래밍)적 요소를 가미하여 Object Pascal이란 언어로 발전하였으며, 이에 Visual개념을 첨가하여 탄생된 언어가 바로 Delphi란 언어이다. 물론 이외에도 수많은 언어들이 세상에 나왔지만 거의 대부분이 도태되어 자신의 존재를 널리 알리지도 못하고 사장되었다. 이것은 프로그램 언어도 시장성이 중요함을 나타내며, 사용자들의 외면을 받게 된다면 곧 사장됨을 의미한다. 그래서 프로그램 언어 개발자들은 많은 사용자들이 사용할 수 있게 하기 위하여 기능성 못지않게 편이성을 강조하게 되었다.
그로 인하여 앞으로의 프로그램 언어의 발전은 전문 프로그래머뿐만이 아니라 일반 사용자들도 워드 프로세서로 문서를 작성하듯이 조금의 노력으로 자기 자신의 업무에 맞는 단순한 프로그램을 직접 만들어 사용할 수 있는 언어를 목표로 발전하게 될 것이다. 이에 추천하는 프로그램 언어가 바로 델파이(Delphi)이다.
행복하셔요! 규춘올림.