상세 컨텐츠

본문 제목

[Delphi] 델파이 자료형 Data Type 관련

본문

반응형

 

 

 

 

=================================

=================================

=================================

 

 

 

 

 

출처: http://foco85.tistory.com/168

 

 

 정수형 (Integer)

정수형은 일반적인 숫자를 표현하는데 사용되는 자료형이다정수형은 표현할  있는 값의 범위에 따라 다시 표와 같이구분된다.

 

자료형   크기
Shortint -128 ~ 127 1바이트부호있는 8비트
Smallint -32768 ~ 32767 2바이트부호있는 16비트
Longint -2147483648 ~ 2147483647 4바이트부호있는 32비트
Int64 -(263) ~ (263)-1 8바이트부호있는 64비트
Byte 0 ~ 255 1바이트부호없는 8비트
Word 0 ~ 65535 2바이트부호없는 16비트
Longword 0 ~ 4294967295          4바이트부호없는 32비트
Integer -2147483648 ~ 2147483647 4바이트부호있는 32비트
Cardinal 0 ~ 4294967295 4바이트부호없는 32비트

 

 

 

 실수형

실수형은 소수점 이하의 값을 다룰  있다는 점에서 정수형과 다르다.

 

 

자료형   유효 자릿수  
Real 5.0 * 10-324 ~ 1.7 * 10308 15 ~ 16자리 8바이트
Real48 2.9 * 10-39 ~ 1.7 * 1038 11 ~ 12자리 바이트
Single 1.5 * 10-45 ~ 3.4 * 1038 7 ~ 8자리 바이트
Double 5.0 * 10-324 ~ 1.7 * 10308 15 ~ 16자리 바이트
Extended 3.6 * 10-4951 ~ 1.1 * 104932 19 ~ 20자리 10 바이트
Comp -263+1 ~ 263-1 19 ~ 20자리 바이트
Currency -922337203685477.5808 ~
-922337203685477.5807
19 ~ 20자리 바이트

 

 

Comp형은 분류상으로는 실수형으로 두었지만실제로는 정수형 값이다이제는 Int64형을 쓰는 것이  효율적이다.(Int64형이 나왔으니깐…) 또한, Currency형도 정확한  계산을 위하여 부동 소수점 연산을 하지않고 소수점 이하  자리만 보존하는 고정 소수점 수이기 때문에 유효 자릿수 이후를 잘라버림으로써 발생하는 Round off오류가 발생하지 않는다연산할 때도 자동으로 10000 곱하고 나누어 주는 기능을 한다.미국과 같이 달러와 센트 등으로 표기하는 국가에서 사용할 만하지만 우리 입장에서는 Int64형을 쓰는 것이 나을  같이 보인다

 

 문자열형

변수를 String형으로 정의하면 Generic형이 되어 기본적으로 AnsiString형으로 정의된다.

 

자료형 최대 길이 필요한 메모리양  
ShortString 255문자 2 ~ 256바이트 과거 버전과의 호환용
AnsiString 231문자 4 ~ 2기가바이트 8비트 ANSI 문자열 처리
WideString 230문자 4 ~ 2기가바이트 유니코드 문자열 처리


 

 

 Boolean

Boolean형은 (True) 거짓(False), 0 1 두가지 값을 표현할  있는 기본 자료형이다.

 

자료형 크기  표현 범위
ByteBool 1바이트의 True/False
WordBool 2바이트의 True/False
LongBool 4바이트의 True/False
Boolean 1바이트의 True/False

 

 

 

실제로 델파이에서는 주로 Boolean형이 많이 사용되고나머지 대수형은 주로 외부 언어나 모듈과 함께 사용된다.

 

 열거형(Enum)

열거형은  그대로  개의 항목들을 나열하고  순서를 값으로 가질  있는 자료형이다.

 

Type

   Colors = ( Red, Blue, Yellow, Black, White)

   //Colors형의 변수는 열거한 5가지 값들 중에서 한가지를 가질  있다. 

Var

   MyColor : Colors;

Begin

   MyColor := Red;

End;

 

 

 

 부분 범위형 (Subrange)

부분 범위형은 파스칼의 독특한 자료형이다부분 범위형은 다른 Ordinal형의 가능한  범위의 부분 집합을 의미한다예를 들어정수들 중에서 1부터 10까지의 정수만을 사용할  있는 범위형을 정의한다면 다음과 같이   있다.

 

Type

   MyNumber = 1..10;

 

 

 

 Ordinal

Ordinal형이라는 것은 순서가 정해진 형을 말한다.

오브젝트 파스칼에서는 Ordinal형으로는 Interger, Character, Boolean, Enumerated, Subrange형이 있다.

실수의 경우 순서가 있다고  수는 있지만 값에 대해 바로 다음 순서가 되는 값을 정할 수가 없다그러나 정수형의경우 항상 1 증가하므로 다음 값은 현재 값에 대해 +1 하면 정할 수가 있다마찬가지로 앞의 값도 구할  있다.

 

Ordinal형의 기본연산

 

 

함수 이름  
Ord(X) X 순서값(정수) 돌려주는 함수
Pred(X) X보다  순서 앞의 값을 돌려주는 함수
Succ(X) X보다  순서 뒤의 값을 돌려주는 함수
High(변수 또는 ) 주어진 형에 대해 주어질  있는 가장  값을 돌려주는 함수
Low (변수 또는 ) 주어진 형에 대해 주어질  있는 가장 작은 값을 돌려주는 함수
Inc(X) 값을  순서 뒤의 값으로 증가시켜 주는 프로시저
Dec(X) 값을  순서 앞의 값으로 감소시켜 주는 프로시저

 

 

 

 

 

 

표준 함수 중에서 정수형을 받아 들이도록 되어 있는 것들은 대부분 Int64 값을 32비트로 잘라서 받아 들이게 되어 있다하지만앞에서도 얘기한 바와 같이 High, Low, Succ, Pred, Inc, Dec, IntToStr, IntToHex 등은 Int64형의 매개변수를 완전히 지원하지만 Ord함수는 받아들이지 못한다.

 

 

 집합형 (Set)

집합형은 파스칼에 있는 독특한 자료형이다집합형은 기본이 되는 Ordinal타입의 256 이하의 요소로 구성된 모음을가질  있다

 

Type

   TintSet = set of 1..250; 

Var

   Set1, Set2 : TintSet;

Set1 := [1, 3, 5, 7, 9];

Set2 := [2, 4, 6, 8, 10];

 

 

 

 배열형

배열은 같은 형의 원소로 구성된 순서가 있는 집합이다배열은 정적/동적으로 할당될  있다.

 

 

[정적배열]

정적배열은 보통 부분 범위형을 써서 다음의 형태로 정의한다.

 

Var

   MyArray : array[1..100] of integer;

 

 

 

 

 

이렇게 하면 정수의 배열이 1부터 100까지 100개가 MyArray라는 이름으로 만들어진다 상태에서 MyArray[3]MyArray배열의 세번째 원소 가리키게 된다기본형 자리에 다시 배열을 만들면 2차원 배열이 된다.

 

Var

   MyArray : array[1..10] of array[1..50] of Real;

   MyArray1 : array[1..10,1..50] of Real;

//MyArray MyArray1 같은 뜻이다.

 

 

 

 

 

 

[동적배열]

동적배열은 델파이 4에서 새로 추가된 기능이다. 동적배열은 크기나 길이를 고정시키지 않는다대신에 배열에 값을 할당하거나 SetLength 프로시저를 통해 크기를 변경시킬 때에 동적으로 메모리를 재할당하게 된다.

 

Var

   MyDynamicArray : array of Real;

SetLength(MyDynamicArray, 20);

 

 

 

위와 같이 하면 MyDynamicArray에는 20개의 Real변수가 첨자 0부터 19까지 할당되게 된다.

동적 배열은 항상 0부터 시작하는 정수의 첨자를 갖는다.

2차원 이상의 동적배열을 만들고자 할때는 다음과 같이 array of … 반복해서 사용한다.

 

 

Type

   TwoDimDynamicArray: array of array of Real;

Var

   TwoDimReal : TwoDimDynamicArray;

SetLength(TwoDimReal, 20);   //전체 행을 10개로 지정

SetLength(TwoDimReal[0], 5);   //첫번째 행에 5개의 실수 배열

 

 

 레코드형

C/C++ 등에서 struct형과 매우 유사한 구조로 여러 종류의 자료형으로  복합 자료형을 제공한다.

레코드형의 각각의 구성 요소가 되는 변수를 필드라고 한다.

 

Type

   레코드형이름 = record   // 예약어 record로써 레코드선언을 시작한다.

      필드1 : 1;        // 각각의 필드마다 다른 형을   있다.

      …

      필드n : n;

end;                      // 레코드 선언의 

 

 

 

 

Type

   Tstudent = record

      Name : String;

      No : Integer;

      Rec : Double;

end;

 

이렇게 선언한 레코드의 멤버는 다음과 같은 방법으로 다룰  있다. 

 

var

   MyRec : Tstudent;

Begin

   MyRec.Name := '홍길동';

   MyRec.No := 20;

   MyRec.Rec := 2.4;

End;

 

 

 

이것은 With문을 사용하여 다음과 같이 사용할  있다.

 

With MyRec do

Begin

   Name := '홍길동';

   No := 20;

   Rec := 2.4;

End;

 

 

 

 포인터형

포인터는 다른 변수의 메모리 주소값을 갖는 변수이다포인터가 다른 변수의 주소값을 가지고 있으면 이를 포인터가 변수를 가리키고 있다고 말한다

 

Procedure Tform1.Button1Click(Sender: Tobject);

Var

   X, Y : Integer;

   P : ^Integer;      // 정수형 변수를 가리키는 포인터 변수 P 선언

Begin

   X := 17;

   Y := 0;

   P := @X;        // P에는 X 주소가 대입된다.

   Y := P^;         // Y에는 P 가리키고 있는 값이 대입된다.

   ShowMessage(IntToStr(Y));        //확인 : 17

End;

 

 

 

포인터 변수의 사용법은 다음과 같다. 

[포인터 변수의 선언]

 예의 4번째 줄처럼 포인터 변수를 선언할 때는  포인터 변수가 가리킬 대상 변수의  앞에 꺽쇠 표시(^) 붙여서포인터임을 표시한다. 

[포인터 변수에 주소값의 대입]

포인터 변수를 사용하려면 먼저 어떤 주소값을 가지도록 해야 한다가리키고자 하는 변수 이름 앞에 @ 연산자를 쓰면 변수의 주소값이 얻어진다. 8번째 줄을 참고하라. 

[포인터 변수를 통한 값의 참조]

 

 

 

포인터 변수 자체는 주소값이므로 그를 통해 간접적으로 대상을 가리켜야 한다이를 위해  선언시와는 반대로 꺽쇠 표시(^) 포인터 변수 뒤에 붙인다 9번째 줄을 참고하라.

 

 

=================================

=================================

=================================

 

 

 

반응형


관련글 더보기

댓글 영역