프로그래밍언어론, 기본 데이터 타입

2020. 4. 16. 01:52

오늘은 컴퓨터 전공과목 프로그래밍 언어개론에서 배우는 기본 데이터 타입에 대해 알아볼 예정이다. 한눈에 알아보기 쉽게 목차부터 정리한다.

 

1. 데이터 타입

2. 데이터 타입의 종류

3. 데이터 타입의 목적

4. 기본 데이터 타입

5. 수 관련 데이터 타입

6. 기타 기본 데이터 타입

 

이제 데이터의 타입부터 천천히 알아보자.

 

1. 데이터 타입

데이터 타입(Data Type)이란, 비슷한 종류의 데이터 개체들과 그 개체들이 가지고 수행할 수 있는 연산들의 집합을 말한다. 쉽게 말하면 같은 속성을 가진 개체들과, 그 개체들을 연산할 수 있는 연산들 +, -, *까지 포함한 집합이라는 것이다. 

 

예를들어 Fortran의 integer, real, arrays 또는 C의 int, float, char 등이 될 수 있다. 데이터 타입은 기본적으로 programming language에서 제공하는 것도 있지만, 사용자가 정의하는 구조체를 정의하는 것도 존재한다.

 

2. 데이터 타입의 종류

기본 데이터 타입으로는 (정수, 실수, 참고짓, 문자)가 있고, 유도된 데이터 타입은 이 기본에서 제공한 것을 구성해서 사용하여 (순서타입[enumeration], 배열[array], 레코드[record], 유니온[union], 포인터[pointer]) 등이 존재한다.

 

3. 데이터 타입의 목적

데이터 타입의 목적으로는 크게 세 가지가 있다.

 

1) 실제 세계의 대상들을 표현하기에, 데이터 타입으로 표현하기는 것이 제일 적합하다.

박목월의 점수는 56점이다. 라고 하는 정보를 int 박목월 = 54와 같이 간단하게 표현할 수 있으므로 세상에 있는 많은 데이터 타입들을 이용해 실제 대상들을 표현한다.

 

2) 공간을 효과적으로 쓸 수 있도록 한다.

int x = 4라고 선언했을 때, 이 x는 int이며 4byte를 할당해주고, 그 안에 4를 넣어라 라고 명령을 해줄 수 있는데, 타입을 선언하지 않으면 complier가 메모리를 넉넉하게 할당해주므로 예를 들어 한 byte만 필요로 하는 작업이더라도 64byte를 할당해준다던지 하면 메모리의 낭비가 생기게 된다.

 

3) 타입 검사로 오류를 사전에 알려준다.

int를 선언한 경우에는 그곳에는 int 값만이 들어가야 한다. 잘못 들어갔을 경우 오류를 일으키는데, 이 편이 더 고마운 경우이다. C를 예로 들면 참거짓을 bool을 지원하지 않는데, 이 때 오류 발생 확률이 낮아지게 되고 그에 따른 실수가 늘어나게 될 수 있어 비용면에서 증가할 수 있다.

 

여기서, 데이터 타입 설계를 내가 만약에 한다면 생각해 볼 것들이 있다.

- 해당 타입에 속한 각 데이터를 어떤 구문을 사용해서 참조하도록 할까?

- 해당 타입에 속한 각 데이터를 가지고 할 수 있는 연산은 어떤 것으로 할까?

- 그리고 그 연산은 어떻게 표현할까?

 

이것에 대한 고민을 모두 거친 뒤 현재 여러가지 언어들이 탄생했다. 내가 만약 언어를 만든다고 할 경우 이러한 것들을 고려해 볼 줄도 알아야 한다.

 

4. 기본 데이터 타입(Primary Data Type)

하나의 데이터 타입은 다른 데이터 타입을 사용해서 복잡하게 정의 될 수 있다. 다른 데이터 타입을 사용하지 않고도 스스로 되는 정의 데이터 타입이다. 

 

예를 들어서 수의 경우 (정수, 실수, 십진수) 등이 있고, 기타 타입인 (참거짓, 문자) 등이 있다.

 

5. 수 관련 데이터 타입

수 관련 데이터 타입에는 정수(Integer Types), 실수(Floating Point Types), 십진수(Decimal Types)가 있다. 하나씩 천천히 살펴보자.

 

1) 정수(Integer Types)

정수는 하드웨어에서 직접 지원된다.(덧셈과 뺄셈 등 연산이 제공된다.) 또한, 한 언어 내에서도 서로 다른 여러가지 정수 타입을 가질 수 있다. 

이것이 무슨 말인가 하면, 정수도 int, short, long 등 다양하게 타입을 가지고 있다는 뜻이다.

또한 부호 정수로 signed integer, unsigned integer로도 두 가지 타입을 가지고 있는 것을 알 수 있다.

이러한 정수의 표기법은 '2의 보수 표기법'을 사용하는데, n bit라고 할 때, sign bit(부호 비트)를 맨 앞 1 bit로 주고, 나머지 n-1bit에 정수를 표기한다.

2) 실수(Floating Point Types)

실수는, 정수 외에 소수점, 분수를 표현할 시에 사용한다.

수학적 실수는 오직 근사치로만 표현이 가능하다. 컴퓨터는 이진수 체계를 기본적으로 사용하기 때문에 파이나, e등은 유한하게, 정확하게 표현이 불가능하다. 이진수 표현 때문에 0.1과 같은 숫자도 표현이 불가하고, 표현을 한다고 해도 정확하게 표현할 수 없다.

 

표현 방법은 부동소수점(floating point)이다.

IEEE Floating point formats 이것을 이용하는데, 

예를 들어 0.5 * e의 3승이 있다고 했을 때, 0.5 부분의 5는 fraction 필드에서 표기하고, 3승에서의 3은 exponent 필드에서 표현이 되게 된다. 나머지 부호 비트는 부호를 표시하게 된다. 여기서 e는 2로 표기된다. (이진수 체계이기 때문에)

 

3. 십진수(Decimal Types)

십진수는, 근사치가 아니라 숫자에 대해 정확한 표현이 꼭 필요할 때 사용하는 타입이다. 예를 들어 돈 계산하기, 등이 있다. 고정된 개수를 십진수를 저장하고, 소수점 위치도 고정되어서 표현하게 한다.

이 경우, 장점은 당연히 정확성이 보장되는 것이지만 단점은 원래는 8 bit에 표현하는 숫자를 정확하게 하기 위해서 자리수 당 여러개의 8 bit가 필요한 것이 되는 것이므로 메모리의 낭비를 일으킬 수 있으며, 메모리의 제한이 존재하기 때문에 표현 가능한 숫자자 한정적이여서 수의 제한도 있다.

 

6. 기타 기본 데이터 타입

기타 기본 데이터 타입으로는 참거짓 (Bool types)과 문자 타입(Character Types)가 있다. 

 

1) 참 거짓(Bool types)

주로 조건 검사 등 프로그램에서 많이 사용되고, 0은 false 1은 true와 같이 표현하므로 주로 1byte로 표현되나. 사실은 1bit만 필요하지만 값을 저장하고 하는 편의를 위해 1byte를 사용한다고 한다. 이런 식이다.

이 1byte가 모두 다 0이면 false이고, 뭐라도 0이 아닌 것이 있다면 true 이렇게 판별을 한다.

 

하지만 이 bool을 가지고 있지 않은 언어도 존재한다. 대부분의 언어에는 별도의 bool 데이터 타입을 가지지만, C언어의 경우 bool을 지원하지 않기 때문에 정수 타입을 빌려서 사용한다.(C, C++)

 

2) 문자 타입(Character Types)

예전에는 컴퓨터는 계산을 하는 기계였기 때문에 숫자만큼 중요한 타입이 없었다. 하지만 이제 문자는 없어서는 안될 타입이 된 것은 모두가 아는 명백한 사실이다. 문자 타입은 한 글자가 코드가 되어서 사용된다.  ASCII(아스키)표현이 기본이며, 8bit의 크기를 갖는다. 표현하는 데에 7bit + 1bit의 결과라고 한다.

영어 1문자 또는 특수 문자를 표현할 때 이러한 방식을 쓴다.

 

더 확장된 개념이 Unicode(Java, C# 경우) 16bit로 확장되어 영문자 뿐 아니라 한글, 중국어, 일본어 및 더 많은 특수 문자 표현이 가능해졌다. 이렇게 유니코드가 등장하였고, 완성형 한글(KS5601)이라는 것도 등장하게 되었다. 이것은 16bit 한글만을 위한 표준 매핑 코드이다.

 

 

 

이렇게 다양한 데이터 타입이 있다는 것을 알게 되었다. 앞으로 이러한 데이터 타입에 유의하면서 코드를 작성해야겠다. 일반적으로 쓰는 타입들이 이렇게 자세한 특징을 가지고 있을줄은 몰랐다!

BELATED ARTICLES

more