C나 C++ 프로그래밍 언어를 배우다 보면 기본 데이터 타입(Fundamental Datatypes)과 파생 데이터 타입(Derived Datatypes)의 개념을 반드시 이해해야 합니다. 이 두 가지는 변수를 선언하고 메모리를 관리하는 방식에서 근본적인 차이를 보이기 때문입니다.
기본 데이터 타입 vs 파생 데이터 타입 비교표
| 기본 데이터 타입 | 파생 데이터 타입 |
|---|---|
| 원시 데이터 타입(Primitive Datatypes)이라고도 불립니다. | 기본 데이터 타입들을 조합하여 만들어집니다. |
| int, char, float, void 등이 대표적입니다. | 배열(array), 구조체(structure), 포인터(pointer) 등이 해당됩니다. |
| 정수 및 문자 타입은 int, char, signed int, signed char, unsigned int, unsigned char로 세분화됩니다. | 포인터는 다른 변수의 메모리 주소를 저장하는 데 사용됩니다. |
| 정수 타입은 정수형 데이터만 저장하며, 소수점 숫자는 저장할 수 없습니다. | 배열은 동일한 타입의 데이터(동질적 데이터)를 연속적으로 저장합니다. |
| 실수 타입은 소수점 숫자를 저장하며, float, double, long double의 변형이 있습니다. | 구조체는 int, float, double 같은 여러 원시 타입을 하나로 묶은 그룹입니다. |
| void는 반환값이 없음을 명시할 때 사용됩니다. | 공용체(union)는 구조체와 유사하지만, 모든 멤버가 동일한 메모리 공간을 공유합니다. |
기본 데이터 타입(Fundamental Datatypes)이란?
기본 데이터 타입은 컴파일러가 기본적으로 제공하는 가장 단순한 형태의 데이터 타입입니다. 별도의 조합 없이 그 자체로 하나의 값을 표현합니다.
- int: 정수형 데이터를 저장합니다. signed(부호 있음)와 unsigned(부호 없음) 옵션으로 음수 포함 여부를 결정할 수 있습니다.
- char: 문자 하나를 저장하며, 내부적으로는 아스키 코드 값으로 처리됩니다.
- float / double / long double: 소수점이 있는 실수를 저장합니다. double은 float보다 더 넓은 범위와 높은 정밀도를 제공합니다.
- void: 값이 없음을 의미하며, 주로 함수가 반환값을 갖지 않을 때 사용됩니다.
파생 데이터 타입(Derived Datatypes)이란?
파생 데이터 타입은 이름 그대로 기본 데이터 타입에서 파생되어 만들어진 타입입니다. 여러 개의 데이터를 묶거나 메모리 주소를 다루는 등 더 복잡한 구조를 표현할 수 있습니다.
- 배열(Array): 같은 타입의 데이터 여러 개를 하나의 이름으로 연속된 메모리에 저장합니다.
- 포인터(Pointer): 변수가 위치한 메모리 주소 자체를 값으로 저장하여, 간접 참조를 가능하게 합니다.
- 구조체(Structure): 서로 다른 타입의 변수들을 하나의 논리적 단위로 그룹화합니다.
- 공용체(Union): 구조체와 비슷하지만, 모든 멤버가 하나의 메모리 공간을 공유하므로 한 번에 하나의 멤버만 유효하게 사용됩니다.
핵심 요약
정리하자면, 기본 데이터 타입은 언어가 처음부터 제공하는 원시적인 타입이고, 파생 데이터 타입은 이러한 기본 타입들을 조합하거나 확장하여 만든 타입입니다. 기본 타입이 '재료'라면, 파생 타입은 그 재료로 만든 '완성품'이라고 이해하면 쉽습니다.