DELPHI/기본 교육 자료

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

Kim.Sung 2017. 10. 10. 10:26
728x90

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;

#델파이 #기초 #혼자끄적끄적

728x90