단순형 | 문자열형 | 구조형 | 포인터형 | 가변형 |
정수형 문자형 대수형 열거형 범위형 실수형 | 단문자열형 장문자열형 광포(Wide) 문자열형 | 배열형 레코드형 집합형 | 무형 포인터 유형 포인터 | 가변형 |
1. 단순형
1) 정수형(integer type)
자료형 | 범위 | 크기 |
Shortint | -128 ~ 127 | 1바이트/부호있는 8비트 |
Smallint | -32768 ~ 32767 | 2바이트/부호있는 16비트 |
Longint | -2147483648 ~ 2147483647 | 4바이트/부호있는 32비트 |
Byte | 0 ~ 255 | 1바이트/부호없는 8비트 |
Word | 0 ~ 65535 | 2바이트/부호없는 16비트 |
Integer | -2147483648 ~ 2147483647 | 4바이트/부호있는 32비트 |
Cardinal | 0 ~ 21473647 | 4바이트/부호없는 32비트 |
2) 문자형(character type)
문자형 | 표현 범위 |
AnsiChar | 1바이트 크기 또는 ASCII 코드 값에 해당하는 문자 |
WideChar | 2바이트 크기 또는 유니코드(Unicode) 값에 해당하는 문자 |
Char | AnsiChar 형과 같음 |
3) 대수형(boolean type)
대수형 | 크기 및 표현 범위 |
ByteBool | 1 바이트의 True/False |
WordBool | 2 바이트의 True/False |
LongBool | 4 바이트의 True/False |
Boolean | ByteBool과 같음 |
4) 열거형(enumerated type) - 몇 개의 항목들을 나열하고 그 순서를 값으로 가질 수 있는 자료형
앞의 자료형들은 값의 범위가 컴파일러에 의해서 정해지지만, 열거형이나 몇몇 자료형들은 사용자가 값의 범위를 정할수 있으므로 사용자 정의형이라고도 함
*. 사용자 정의형은 type 절에 정의해야 합니다.

*. 열거형 변수를 선언할 때 나열된 값들은 해당 열거형 변수에 대해서만 일종의 상수로 취급합니다.
예를 들어, 앞의 열거형 변수에서 사용된 Red를 새로운 변수 이름으로 선언할 수 없습니다.

5) 범위형(subrange type) - 단순형들 중에서 특정 자료형이 표현할 수 있는 범위의 일부만을 범위로 가지는 자료형입니다.
범위형도 열거형과 마찬가지로 사용자가 범위를 지정할 수 있으므로 사용자 정의 자료형입니다.

6) 순서형(ordinal type) - 지금까지 설명했던 단순형들은 변수에 대입 할수 있는 값의 순서가 정해져 있으므로 순서형 이라고도 합니다.
순서형에서는 특별한 연산이 가능합니다. 어떤 값보다 바로 앞에 있거나 뒤에 있는 구하는 연산인 경우에는 Pred와 Succ를 사용하고,
어떤 값이 처음부터 몇번 째 위치에 있는지 알아내는 연산인 경우에는 Ord를 사용합니다.
7) 실수형(real type)
실수형 | 범위 | 크기 |
Real | 2.9 * e-39 ~ 17 * e38 | 6 바이트 |
Single | 1.5 * e-45 ~ 3.4 * e38 | 4 바이트 |
Double | 5.0 * e-324 ~ 1.7 * e308 | 8 바이트 |
Extended | 3.4 * e-3942 ~ 1.1 * e4932 | 10 바이트 |
Comp | -263 ~ 263 -1 | 8 바이트 |
Currency | -922337293685477.5808 ~922337293685477.5807 | 8 바이트 |
2. 문자열형(string type)
문자열 형 | 설명 |
ShortString | 최대 255자 길이의 문자열을 가질 수 있습니다. |
AnsiString | 임의의 길이의 ASCII 문자열을 가질 수 있습니다. |
WideString | 임의의 길이의 유니코드(Unicode) 문자열을 가질 수 있습니다. |
String | 컴파일러 지시자에 따라 ShortString 이나 AnsiString이 됩니다. {$H+}가 사용된 경우에는 AnsiString이 되고(기본값), {$H-}가 사용된 경우에는 ShortString이 됩니다. |
3. 구조형(structured type)
1) 배열형(array type) - 동일한 자료형의 값들을 여러개 저장하는데 사용
ex1>
var
A : array[1..10] of Integer;
A[1] := 100;
ex2> 범위형
type
SI = 1..10;
var
AA : array[SI] of Integer;
ex3> 열거형
var
CA : array[Colors] of Integer;
CA2 : array[Red..Blue] of Integer;
// 이 배열 사용시 아래와 같이 해야합니다.
CA[Red] := 1;
CA2[Blue] := 10;
ex4> 배열을 가지는 배열(다차원 배열)
var
AA : array[1..10] of array[Boolean] of Integer;
AA[1, false] := 1;
// 위와 같은 선언
var
A : array[1..10, Boolean] of Integer;
2) 레코드형(record type) - 다른 자료형의 여러 데이터를 다루기 위해서 정의, C언어의 구조체와 비슷
ex1>
type
Cities = (Seoul, Incheon, Pusan, Jinju);
AddrInfo = record;
Name : String;
Sex : Char;
City : Cities;
Post1 : Shortint;
Post2 : Shortint;
end;
ex2>
var
MyAddr : AddrInfo;
...
MyAddr.Name := '철수';
MyAddr.Sex := 'M';
MyAddr.City := Seoul;
MyAddr.Post1 := 100;
MyAddr.Post2 := 200;
ex3>
var
MyAddr : AddrInfo;
...
with MyAddr do begin // begin 과 end 사이에는 MyAddr. 생략 가능
Name := '영희';
Sex := 'F';
City := Pusan;
Post1 := 100;
Post2 := 200;
end;
3) 집합형(set type) - 수학에서 말하는 흔히 사용되는 집합을 표현하는데 사용되는 것
ex1>
var
CharSet : Set of Char;
// 아래와 같이 표현
CharSet := ['a', 'c', 'f'];
4. 포인터형(pointer type) - 어떤 대상을 가리키는 값을 표현하는 자료형
일반적으로, 변수는 메모리라는 기억장소에 저장되고 포인터형 변수는 변수가 저장된 메모리 영역을 가리킵니다.
그래서, 포인터형 변수는 일정한 범위의 값이 아니라, 변수가 저장된 메모리 영역의 주소를 값으로 가지게 됩니다.
포인터(포인터형 변수)가 메모리의 유효한(사용가능한) 영역을 가리키게 하는 방법 2가지
1) 실제로 선언된 변수의 주소를 포인터에 대입한다. - 간접 어드레싱(indirect addressing)
2) 시스템에서 어떤 메모리 영역을 할당(allocate) 받은 후, 포인터가 그 영역을 가리키게 한다. - 동적 변수(dynamic variable)
오브젝트 파스칼에서의 포인터 선언 하는 방법
1) 무형 포인터 - Pointer 예약어 사용
ex>
var
P : Pointer;
2) 유형 포인터 - ^ 기호를 붙여서 사용
ex1>
var
PI : ^Integer;
ex2>
type
PInteger = ^Integer;
...
var
PI : PInteger;
*. 기본 자료형에 대한 유형 포인터의 예 - 널 종료 문자열(null terminated string) - c/c++에서는 \0, 오브젝트 파스칼에서는 NIL
- 널종료문자열을 사용하려면 반드시 초기화 과정을 거쳥 한다.
널종료문자열에 필요한 메모리를 할당 받거나 또는 널 종료 문자열이 다른 유효한 문자열이나 배열을 가리키게 해야합니다.
선언된 포인터형 | 의미 |
PChar | ^AnsiChar |
PAnsiChar | ^AnsiChar |
PAnsiString | ^AnsiString |
PShortString | ^ShortString |
ex>
var
PI : PInteger;
I : Integer;
...
I := PI^; // PI가 가리키는 값을 I에 대입한다.
5. 가변형(variant type) - 실행시 임의의 자료형을 포함할 수 있는 자료형,
주로, OLE 기능 구현에 중요한 역할을 함
ex>
var
V : Variant;
■ 형변환(casting) - 서로 다른 형의 변수를 대입하기 위해 하는 변환
ex>
I : Integer;
C : Char;
I := Integer(C);
<연산자(operators)와 수식>
1. 산술(arithmetic) 연산자 - 일반적인 산술 연산
연산자(operator) | 연산(operation) | 피연산자(operand) | 용례 |
+ | 덧셈 | 정수형/실수형 | 5+5(=10), 1+1.1(=2.1) |
- | 뺄셈 | 정수형/실수형 | 10-3(=7), 100-11.1(=88.9) |
* | 곱셈 | 정수형/실수형 | 10*10(=100), 5.5*1.1(=6.05) |
/ | 나눗셈 | 정수형/실수형 | 15/4(=3.75), 16/2.5(=6.4) |
div | 정수형 나눗셈 | 정수형 | 15 div 4(=3) |
mod | 나머지 | 정수형 | 15 mod 4(=3) |
2. 논리(logical) 연산자 - 다양한 논리 연산을 위해 제공
연산자 | 연산 | 피연산자 | 용례 |
and | 논리적 AND | 정수형 | 123 and 11(=11) |
or | 논리적 OR | 정수형 | 123 or 11(=123) |
not | 논리적 NOT | 정수형 | not o(=$ffffffff) |
xor | 논리적 XOR | 정수형 | 123 xor 11(=112) |
shl | 비트를 좌측으로 이동 | 정수형 | $ffff shl 4(=$fff0) |
shr | 비트를 우측으로 이동 | 정수형 | $ffff shr 4(=$0fff) |
3. 대수(boolean) 연산자 - 대수형에 대해 수행할수 있는 연산자
연산자 | 연산 | 피연산자 | 용례 |
and | 논리적 and | 대수형 | false and true(= false) |
or | 논리적 or | 대수형 | false or true(=true) |
not | 부정 | 대수형 | not false(=true) |
xor | 논리적 xor | 대수형 | false xor true(=true) |
4. 관계(relation) 연산자 - 비교 연산시 사용되는 연산자
연산자 | 연산 | 피연산자 | 용례 |
= | 동일하다 | 비교가능한 형(단순형등) | A = B |
<> | 다르다 | 비교가능한 형(단순형등) | A <> B |
> | 보다 크다 | 비교가능한 형(단순형등) | A > B |
< | 보다 작다 | 비교가능한 형(단순형등) | A < B |
<= | 보다 같거나 크다 | 비교가능한 형(단순형등) | A <= B |
<= | 부분집합이다 | 집합형 | A <= B |
=> | 보다 작거나 크다 | 비교가능한 형(단순형등) | A >= B |
=> | 수퍼셋이다 | 집합형 | A >= B |
in | 에 속해있다 | 집합형(연산자 우측)과 그 원소(연산자 좌측) | 'a' in S |
5. 문자열 연산자
연산자 | 연산 | 피연산자 | 용례 |
+ | 접합 | 문자열형 | 'ABC'+'DEF'(='ABCDEF') |
6. 집합 연산자 - 일반적인 집합의 연산을 수행
연산자 | 연산 | 피연산자 | 용례 |
+ | 합집합 | 집합형 | A+B(=A와 B의 합집합) |
- | 차집합 | 집합형 | A-B(=A의 B에 대한 합집합) |
* | 교집합 | 집합형 | A*B(=A와 B의 교집합) |
7. 포인터 연산자
연산자 | 연산 | 피연산자 | 용례 |
@ | 변수의 주소를 돌려 줍니다 | 임의의 자료형 | @A(=A의 주소) |
+ | 포인터에 다른 값을 더합니다 | 문자형 포인터 | P+I(=P에 I를 더함) |
- | 포인터로부터의 다른 값 만큼 뺍니다 | 문자형 포인터 | P-I(=P에서 I를 뺌) |
ex>
var
P, PP : PChar;
C, CC : Char;
...
C := 'A';
P := @C;
PP := @CC;
PP^ := P^; // PP^와 P^, 그리고 CC는 'A'입니다.
댓글 없음:
댓글 쓰기