Saturday, August 18, 2012

기본적인 자료형(타입)(Fundamental types)

앞에서 쭉 설명 해왔듯이 컴퓨터의 두뇌는 CPU 입니다. 프로그램의 대부분이 CPU에 의해서 구동되며 나머지 부분들은 컴퓨터의 다른 부분이 맡게 됩니다.

컴퓨터가 처리하는 데이터의 가장 작은 단위는 비트(bit) 입니다. 비트는 0이나 1의 값을 가질 수 있습니다. 하드웨어 레벨에서는 트랜지스터가 이 비트를 제어하고 있습니다.

하지만 비트는 0과 1만을 다루기 때문에 그 용도가 아주 한정적일수 밖에 없습니다. 그리하여 CPU는 하나 이상의 비트로 이루어진 자료형을 정의하여 사용하고 있습니다. 예를 들면 abyte 자료형은 8비트로 이루어져 있습니다. N비트의 CPU는 N비트의 자료형을 가장 효율적으로 처리할 수 있습니다. 예를 들면 32비트 CPU나 64비트 CPU 등등이 있겠습니다.
하지만 CPU가 다루는 자료형만으론 많이 부족합니다: 이러한 자료형만으론 학생 이름이나 카드놀이와 같은 하이레벨의 개념들은 다룰 수 없습니다. 프로그래머들은 이러한 개념들을 struct 나 class 로 정의합니다. 이러한 개념은 나중에 다시 살펴보겠습니다.

 D 언어의 기본 자료형 들은 밑의 표에서 알 수 있다시피 다른 프로그래밍 언어의 기본 자료형과 매우 유사합니다. 각 단어들의 뜻은 아래에 함께 기재하였습니다.(역자 주: 밑의 표의 정의 부분에 표기된 내용들은 말 그대로 정의입니다. 말이 정의지 실제로는 하나의 고유명사로 봐야 합니다. 때문에 원문의 정의 옆에 그 해석을 따로 달겠습니다.)
D언어의 기본 자료형
자료형정의초기값
boolBoolean type : 불리언false
bytesigned 8 bits : 부호를 가진 8비트0
ubyteunsigned 8 bits : 부호가 없는 8비트0
shortsigned 16 bits : 부호를 가진 16비트0
ushortunsigned 16 bits : 부호가 없는 16비트0
intsigned 32 bits : 부호를 가진 32비트0
uintunsigned 32 bits : 부호가 없는 32비트0
longsigned 64 bits : 부호를 가진 64비트0L
ulongunsigned 64 bits : 부호가 없는 64비트0L
float32-bit floating point : 32비트 부동 소숫점의 값float.nan
double64-bit floating point : 64비트 부동 소숫점의 값double.nan
real하드웨어가 지원 가능한 최대 부동 소숫점의 값이나 double을 의미하지만 둘 중 큰 값까지 지원real.nan
ifloatimaginary value type of float : 부동 소숫점 값의 허수float.nan * 1.0i
idoubleimaginary value type of double : 부동 소숫점 값의 허수double.nan * 1.0i
irealimaginary value type of real : real 값의 허수real.nan * 1.0i
cfloatcomplex number type made of two floats : 두 부동 소숫점으로 이루어진 복소수float.nan + float.nan * 1.0i
cdoublecomplex number type made of two doubles : 두 부동 소숫점으로 이루어진 복소수double.nan + double.nan * 1.0i
crealcomplex number type made of two reals : 두 real 자료형으로 이루어진 복소수real.nan + real.nan * 1.0i
charUTF-8 code unit : UTF-8 코드의 단위0xFF
wcharUTF-16 code unit : UTF-16 코드의 단위0xFFFF
dcharUTF-32 code unit and Unicode code point : UTF-32 코드의 단위0x0000FFFF
또한 "void"는 자료형이 없다는 것을 의미합니다. 키워드 cent와 ucent는 후에 부호가 있고 없는 128비트 값을 나타내기 위해 추가될 예정입니다.

만약 특별히 꺼릴 이유가 없다면 어지간한 값들은 int를 사용하면 됩니다. 분수, 소수값들은 double의 사용을 고려합시다.

다음은 표에서 사용된 단어들의 설명입니다.

불리언(Boolean) : 논리적 표현을 나타내는 자료형입니다. 참에 대해서는 true를 가지며 거짓에 대해서는 false를 가집니다.

부호를 가진 자료형(Signed type) : 음수와 양수를 가질 수 있는 자료형입니다. 예를 들어 byte 의 경우 -128에서 부터 127까지의 수를 가집니다.(역자 주: 8비트가 가지는 값의 수는 2^8=256 입니다. -127부터 0을 포함한 128까지의 숫자는 총 256개 입니다.) 말 그대로 음의 부호에서 따온 이름입니다.

부호가 없는 자료형(Unsigned type) : 오로지 양수만을 가지는 자료형입니다. 에를 들면 ubyte 의 경우 0에서 255까지의 값을 가집니다. 맨 앞글자 u도 역시 unsigned에서 따온것입니다.

부동 소숫점(Floating point) : 1.25와 같이 소숫점을 나타낼 수 있는 자료형입니다. 부동 소숫점  연산의 유효숫자는 자료형 타입의 비트와 직접적으로 연관을 가지고 있습니다: 비트수가 높을수록 연산 결과의 유효숫자는 증가합니다.

오로지 부동 소숫점 자료형만이 십진 소수값을 나타낼 수 있습니다;int와 같은 정수 자료형은 1이나 2와 같은 정수값만을 나타 낼 수 있습니다.


복소수 자료형(Complex number type) : 수학의 복소수를 나타내는 자료형입니다.
 허수 자료형(Imaginary number type) : 복소수의 허수부만을 나타내는 자료형입니다. 이러한 자료형의 초기값이 i 라고 표기되어 있는데, 수학에서의 -1의 양의 제곱근을 나타내는 값입니다.
nan(NaN, 수가 아님) : "not a number"(수가 아님)의 약자입니다. 유효하지 않은 부동 소숫점을 나타내는 값입니다.(역자 주 : 1/0, 즉 1을 0으로 나누었을때의 결과값을 대수학에서는 무한대라는 개념으로 나타냅니다만 이러한 연산을 부동 소숫점 자료형에 부여 해 줄 경우 nan이 출력됩니다.)

자료형의 속성들

D의 자료형들은 속성(property)을 가지고 있습니다. 이러한 속성들은 자료형 끝에 마침표(".")를 추가 해줘서 사용 할 수 있습니다. 예를 들면 sizeof라는int 의 속성은 int.sizeof 라는 형식으로 접근 가능합니다. 이번 챕터에서는 4개의 속성만을 살펴봅시다.

stringof 는 자료형의 이름을 나타내는데 사용합니다.
sizeof 는 자료형의 길이를 바이트 단위로 나타냅니다. (만약 비트로 값을 출력받으려면 8을 곱해주면 됩니다. 1바이트는 8비트이기 때문입니다.)
min 은 자료형이 가질수 있는 가장 작은 값, 즉 최소값을 출력합니다.
max 는 자료형이 가질수 있는 가장 큰 값, 즉 최대값을 출력합니다.
 int 의 속성을 출력하는 예제를 살펴봅시다.
import std.stdio;

void main()
{
    writeln("Type           : ", int.stringof);
    writeln("Length in bytes: ", int.sizeof);
    writeln("Minimum value  : ", int.min);
    writeln("Maximum value  : ", int.max);
}
size_t 라는 자료형도 있습니다. 다른 특별한 자료형이 아니라 부호가 없는 자료형의 별칭(alias) 입니다. 예를 들면 ulong 를 들수 있겠습니다. "size type"에서 따온 이름입니다. size 나 count 와 같은 개념들을 나타내기에 좋은 자료형입니다.
(역자 주 : size나 count는 번역하지 않았는데, 왜냐하면 이 두 단어는 자료형이나 클래스 등의 속성으로 자주 나타나는 단어들이기 때문입니다. size와 같은 경우에는 어떠한 자료형이나 클래스가 몇개의 값(다른 자료형이나 클래스, 문자형 값들)을 가지는가를 나타내는 경우가 많고 count와 같은 경우는 반복된 연산에서 연산을 몇번 반복했나 등을 셀때 쓰는 단어로 자주 쓰입니다. 현재는 무슨말인지 헷갈리는 분들도 계시겠지만 후에 가면 자연스럽게 알게 됩니다.)

.stringof 속성을 사용하여 자료형 size_t 가 독자분들의 컴퓨터에서 어떤 자료형의 별칭인지 확인 할 수 있습니다.
import std.stdio;

void main()
{
    writeln(size_t.stringof);
}
제 컴퓨터에서는 다음과 같은 값을 출력합니다.
ulong

연습문제

자른 자료형들의 특성들을 출력 해 봅시다.
주목: cent와 ucent는 나중에 사용될 예정이므로 사용 불가입니다.; 그리고 예외사항으로, void 자료형은 min과 max 속성을 가지고 있지 않습니다.

...답안

No comments:

Post a Comment