[델파이]기본개념 - 2 [클래스, 트랜잭션, Exception]

1.     매개변수 전달 방법


-       값으로 넘기는 경수 Call by value


n  Function add(x,y : integer) : integer;


Var


         J,I : integer;


          I := 3;


         J := 2;


    Begin


         Add(I,j);


    End;


-       상수 값으로 넘기는 법


-       Call by Reference


 


2.     클래스


-       클래스는 속성과 행위를 갖는 레코드형과 마찬가지로 일종의 자료형(Type)입니다.


-       클래스 형으로 정의한 변수는 그 자체가 개체(오브젝트)가 되는 것이 아니라 메모리에 자리잡기 위해서는 인스턴스 하는 작업이 필요한데 이를 생성(Create)이라고 한다. 내부적으로 데이터와 메소드를 가지고 있습니다. 클래스는 Type 절에서 선언 한다.


-       클래스를 선언할 때는 예약어 Cless를 사용하며 괄호 안에 계승 받을 선조 클래스를 표시 한다.


-       조상클래스를 생략하면 가상 상위의 클래스 TObject에서 계승 받는 것을 의미 한다.


-       Create


n  생성자는 예약어 Constructor로 시작하는 특별한 프로시저로 개체를 생성하고 초기화하는 동작을 수행하는 루틴이다. 보통 생성자는 Create라는 이름으로 만들며 다음과 같은 형태를 갖는다.


n  생성자는 오브젝트가 생성되기 전에 호출되기 때문에 클래스 이름으로 지정하여 호출하도록 되어 있습니다. 새로운 클래스를 작성할 때 필요에 따라 생성자를 작성 할 수 있다.


Ø  Constructor TMyobj.Create;  //델파이에서 클래스는 앞에 T 라고 붙인다.


Ø  Constructor TCompoent.Create(Aowner.TCompoent);


n  생성자는 형 이름으로 호출 된다.


Ø  오브젝트를 위한 메모리 공간을 확보한다.


Ø  선언된 필드들을 초기값으로 만들어 준다. 그 후에 프로그래머가 기술한 생성자 코드를 수행하고 끝내면 할당된 오브젝트에 대한 주소 값을 돌려주게 된다.


 


-       Ex)


Type


TPerson = cless(Tobject)  //Cless 공백이면 자동적으로 (Tobject)값이다.


    Name : String;


    Age: byte;


    Address : string;


    Function GetName : string;  // 키보드 Ctrl + shift + c 를 누르면 자동 생성


    Constructor Create; virtual;  //버추얼로 지정         // 생상자


           End;


              Temp = class(Tperson)


                 Office : String;


                 Constructor Create; override;  //재정의 해서 쓰겠다.


              Function Salary : integer : virtual; abstract; //바디가 없고 객체만 있다 


// 그 해당하는 클래스 인스턴스에 맞게 찾아가겠다. 가변적으로 속도면에서는 virtual 메모리에서는 Dynamic 거의 비슷하다.


           End;


          TS = class(temp)


                Rank : String;


             Function salary : integer;


          End;


           TH = class(Temp)


                  Hrs : integer;


               Rate : integer;


                Function salary : integer;


           End;


          -------------------------------------------------------------------------------------------------


          Function TPerson.GetName : String;


             Begin


            // Result := self.Name;  // 해당 클래스에서 넘어오는 인스턴스 지시어가 Self 이다.


                                  // 결국 Self은 해당하는 TPerson 클래스를 의미


              Result := Name;


End;


Constructor Tperson.Create;


Begin


    Name := ‘kim’;


    Age  := 20;


    Address := ‘AnyWhere’;


End;


Constructor Temp.Create;


Begin


    Inherited;


    Office := ‘데브기어’;


End;


-------------------------------------------------------------------------------------------------


 Type


        Tmythread = class(thread)  //델파이에 이미 있는 쓰레드를 갔다 쓴다


Procedure execurte ; override;         //재정의를 하여 쓴다.


           End


           Tmythread.execurte  //계승 받아 쓴다


              Begin


           


           End


           ----------------------------------------------------------------------------------------------------


n  Destroy


Ø  파괴자는 예약어 Destructor로 시작하는 루틴으로 생성자와 반대로 작업을 정리하고 메모리를 해제하는 기능을 수행한다.


Ø  Destructor Tmyobj.Destroy; 


n  Free


Ø  할당된 개체의 인스턴스를 체크하여 내부적으로 Destroy를 부르는 루틴이다.


Ø  Myobj.Free;


3.     O.O.P 프로그래밍의 특징


-       상속(Inheritance)


n  상속이란, 기존의 클래스를 기반으로 새로운 클래스를 정의하는 것을 말한다. 여기에서 기존의 클래스는 부모 클래스, 새로운 클래스는 자식 혹은 파생 클래스라고 표현한다. 즉, 부모 클래스가 가지고 있는 상태와 행위를 그대로 가져오는 것을 말한다. 이 때, 부모의 모든 것을 무조건 그대로 가져와야 한다. 가져온 후에 다른 특성을 추가하는 등 수정을 하는 것은 가능 하지만 처음부터 받지 않는 것은 불가능 하다.


-       다형성(Polymorphism)


n  프로그래밍 언어에서 서로 다른 기능들을 하나의 문장으로 수행할 수 있는 능력을 말한다. 즉, 하나의 루틴의 이름으로 각 개체에 맞는 루틴을 수행한다.


-       캡슐화(Encapsulation)


n  클래스에서 정의한 개체를 외부에 공개하지 않도록 설정하는 기능 이다.


4.     개체


-       메모리에 생성된 오브젝트가 바로 개체 또는 인스턴스 이다.


-       클래스가 붕어빵을 만드는 틀이라면 개체는 구워져 나온 붕어빵과 같다.


-       개체는 자신만의 데이터를 가지며 클래스의 행위를 수행한다.


5.     컴포넌트 라이브러리


-       델파이는 클래스들처럼 VCL(Visual Component Libray)라는 이름으로 윈도우 프로그래밍에 필요한 세부사항을 미리 만들어 준비해 두고 개발자들이 편리하게 사용할 수 있도록 제공 한다.


-       컴포넌트 라이브러리 내의 컴포넌트들은 모두 상속에 의한 계층적인 구조를 가지고 있습니다. 이것을 VCL 계층구조(VCL Hierarchy)라고 부른다.


-       컴포넌트의 구성요소


n  속성(Propety)


Ø  컴포넌트가 표시되고 제어되는 방법에 대한 Attribute 변수로서 필드가 안전하게 참조 될 수 있도록 ReadWrite문을 통해 속성값을 사용 한다.


Ø  속성은 값을 읽어 들이는 일종의 통로 역할을 한다.


n  메소드(Wethod)


Ø  컴포넌트 안에 정의되어 있는 프로시저나 함수 이다.


n  이벤트(Event)


Ø  컴포넌트가 인식할 수 있는 사용자 행위나 시스템 동작들 이다.


Ø  이벤트의 종류에는 크게 보면 두가지 종류가 있다.


Ø  하나는 사용자가 발생시키는 이벤트인 사용자 이벤트 이다.


Ø  두번째는 운영체제가 발생시키는 이벤트인 시스템 이벤트 이다.


Ø  델파이는 이런 이벤트들을 폼이나 컴포넌트안에 정의해 두었다.    


Ø  오브젝트 인스펙터의 이벤트 탭에서 확인 할 수 있다.


-       컴포넌트 사용 방법


n  사용 개체의 유닛을 Uses 한다


n  인스턴스 변수를 선언한다.


n  생성자 루틴(Create)을 호출하여 메모리에 할당하고 초기 처리 한다.


n  Property, Event, Method등을 사용한다.


n  Free를 호출하여 파괴자 루틴(Destroy)을 불러내 메모리에서 해제한다.


6.     Exception 처리


-       발생한 오류에 대한 정보를 포함하는 개체로서 보통 Sysutils,pas에 정의 되어 있다.


-       오류가 발생하면 해당 에러 개체가 생성되는데 우리는 이것을 Exception 이 Raise 되었다고 한다.


-       델파이는 Exception이 발생할 때마다 Exception 개체를 자동으로 발생 시킨다 또한 Exception이 처리 될 때 델파이는 자동으로 개체 인스턴스를 파괴 한다.


-       Exception 종류


n  입력/출력(I/O) Exception : ElnOutError


n  Heap Exception : EoutofMemory, Elnvalidpointer, EoutorResources


n  정수 일치 Exception : ElntError, EDivBZero, EinOverFlow


n  부동소수점 일치 Exception : EZeroDivide, EOverFlow, EUnderFlow, ElnvalidOP


n  Typecast Exception : ElnvalidCast


n  변환 Exception : EConverterError


n  하드웨어 Exception : EFault, EStackFault, EPageFault


-       Exception 처리 블록


n  Try Finally


Try


  <statement1>


<statement2>


Finally


<statement3>


                 End;


n  오류가 발생하지 않는 경우는 모든 문장들이 순차적으로 실행된다.


n  Try ~ Finally 사이의 코드에서 오류가 발생이 되면 발생된 코드에서 바로 Finally 부분의 코드로 이동되어 실행된다.


n  실시간 오류가 발생될 지라도  finally 부분의 코드는 항상 실행이 된다.


n  Try ~ finally 블록을 사용하여 리소스의 할당이나 복원할 필요가 있는 코드들에 대한 Clean  up 코드를 실행하도록 한다.


 


n  Try ~ Except


Try


<statement1>


<statement2>


              Except


                On exception type1 do


                   <statement3>


                On exception type2 do


                   <statement4>


             End;


n  오류발생 없이 코드가 수행될 경우는 Except 다음 부분의 코드는 수행되지 않는다.


n  오류가 발생된 곳에서 바로 except 부분의 코드로 점프 되어 수행되며 except 다음의 코드는 발생된 오류 개체에 대해 처리하는 코딩 이다.


n  발생된 오류 개체가 try ~ except 문으로 처리되면 시스템은 더 이상 에러 상황으로 보지 않으므로 프로그램은 정상적으로 수행된다.


n  On ~ Do 문의 어떤 것도 현재 Except에 적용되지 않는다면 Else부분에서 기본 Handler가 실행된다. 만일 else 부분이 제공되지 않으면 Handler가 발견될 때까지 계단식으로 찾아간다.


n  Exception Handler에서 특정 에러 개체를 지정하기 위해 On ~ Do 문을 사용할 수 있으며 그 개체의 인스턴스를 받을 수 있는 임시 변수를 사용할 수 있다.


n  Exception 개체는 이 변수 이름을 통하여 속성과 메드에 접근할 수 있다.


-       수동으로 Exception 발생


n  Run – time Error가 아닌 것을 자체 코드 내에 조건을 관리 하기 위한 자체 Exception을 정의할 수 있다.


Type


ElnputError = Class(Exception);


n  위와 같이 코드 내에 자체 Exception을 정의 할 수 있으나 가장 상위의 Exception 클래스를 사용 된다.


n  주로 입력이나 조건 체크에서 주로 사용 한다.


-       Exception 재시도 처리


n  Exception 발생 시 Try ~ Except 구문으로 처리하게 되면, 개체가 파괴되고 정상으로 흐르게 되어 있다.


n  경우에 따라서는 밖의 블록에서 그 조건의 오류를 다시 검색하고자 할 때 재시도 할 수 있다.


Function GetAverage(Sum : integer; Numitems : word) : double;


Begin


   Try


      Result := Sum / Numitems;


   Execep


      On Ezarodivide do


      Begin


         Result  := 0,0;


         Raise;


      End;


                  End;


               End;


-       응용프로그램 Exception 처리 하기


n  처리되지 않은 Exception 개체는 Exception이 발생한 루틴을 빠져나와 이 루틴을 호출한 루틴에서 처리한 곳이 있는 지 찾아보게 된다.


n  처리되지 않은 Exception 개체는 응용 프로그램의 바깥쪽으로 계속 전파될 것 이다. 여기에서는 응용프로그램의 가장 바깥쪽 단계에서 Exception을 처리하는 방법을 밑에서 다시 설명 한다.


n  HandleException 메서드는 응용프로그램이 가장 바깥쪽의 수준으로 전파된 Exception을 가지고 있을 때 호출되는 루틴 이다.


n  ShowException 메서드는 Exception 개체 메시지가 있는 대화 상자를 화면에 나타낼 책임이 있는 루틴 이다.


n  OnExcaption


7.     트랜잭션 이란?


-       트랜잭션이란 데이터베이스에서의 통합성(Integration)을 유지하기 위한 하나의 방법이다.


-       트랜잭션이 적용되는 전형적인 예는 은행 업무의 계좌 이체 같은 것 이며, 예를 들어 A에서 B로 계좌이체 시킨 다면 2개의 작업으로 구성된다.


-       첫째 A에서 10만원을 인출하고 다시 B계좌로 입금 처리하는 작업 이다. 만일 처음 작업은 성공하고 두번째 작업도중 오류가 발생하여 실패했을 경우 어떻게 되겠는가?


즉 10만원이 A에서는 인출이 되었지만 B에는 입금이 안되어서 10만원의 돈이 안 맞게 된다. 따라서 데이터베이스에서는 이러한 문제를 해결하기 위해서 트랜잭션을 사용하는 것 이다.


-       트랜잭션이란 데이터베이스의 통합성과 일관성을 유지하기 위해서 실패와 성공을 같이 하는 최소한의 SQL 논리 묶음이다.


-       두번째 작업까지 올바르게 수행되어야만 이체 작업이 올바르게 수행 되었다고 하는 것을(Commit)을 데이터베이스 환경에서 트랜잭션 처리는 다음 내용을 유지 한다.


-       데이터베이스 환경에서 트랜잭션 처리는 다음 내용을 유지한다.


n  하드웨어 장애가 발생한 경우라도 데이터베이스의 일관성(Consistency)


n  다중 사용자 접근에서의 데이터베이스의 무결성(Integrity)


-       트랜잭션 제어 방법


n  합축적인제어(Implicitly)


Ø  기본적으로 델파이는 Post, AppendRecord 등의 메서드를 호출할 때 트랜잭션을 자동으로 시작하고 Commit 한다. 행을 기본으로 데이터베이스의 변경을 Commit 한다. 이러한 작업은 네트워크 트래픽을 증가시키고 우연성을 제공하지 않을 수도 있다.


n  명백한 제어(Explicitly)


Ø  사용자나 응용프로그램이 필요에 따라 트랜잭션을 요구할 때만 Commit 된다.


Ø  TSQLConnection 컴포넌트의 메서드를 이용 한다.


n  StartTransaction : 트랜잭션을 시작한다.


n  Commit : 현재 활성화된 트랜잭션을 물리적으로 데이터 베이스에 적용 한다.


n  Rollback : 현재 활성화된 트랜잭션의 작업을 취소하고 모두 원래 상태로 복구 한다.


n  InTransaction : 현재 트랜잭션이 활성화되어 있는지를 True/False 값으로 표시 한다.


Var


Td: TTransactionDesc;


              Initalization


                 Begin


                 Td.TransactionID := 1;


                 Td.lsolationLavel := xilREADCOMMITTED;


                // 이 트랜잭션과 데이터베이스와의 고립수준


              End; 

댓글

이 블로그의 인기 게시물

[델파이_Delphi] 기본 개념 -1 [프로젝트, 함수, 프로시저]