프로그래밍에서 데이터 타입(data type)은 사용자가 사용하려는 데이터의 종류와 성격을 의미합니다. 컴파일러나 인터프리터는 이 데이터 타입을 기준으로 데이터를 처리하며, 메인 메모리에 그에 맞는 저장 공간을 할당하게 됩니다.
데이터의 성격에 따라 데이터 타입은 크게 두 가지로 나눌 수 있습니다. 하나는 기본 데이터 타입(Fundamental Data Type)이고, 다른 하나는 파생 데이터 타입(Derived Data Type)입니다. 두 데이터 타입 모두 프로그래밍에서 널리 사용되며, 데이터 위에 비즈니스 로직을 구현할 때 동등하게 중요한 역할을 합니다.
아래에서 기본 데이터 타입과 파생 데이터 타입의 주요 차이점을 항목별로 살펴보겠습니다.
기본 데이터 타입 vs 파생 데이터 타입
| 번호 | 구분 | 기본 데이터 타입 | 파생 데이터 타입 |
|---|---|---|---|
| 1 | 정의 | 이름 그대로 언어 자체에서 제공하는 구체적인(concrete) 데이터 타입입니다. 고유한 특성과 속성을 가지며, 해당 데이터를 다루기 위한 기본적인 연산 메서드도 함께 제공됩니다. | 기본 데이터 타입들을 조합하여 만들어진 데이터 타입입니다. 즉, 기본 데이터 타입으로부터 파생되었으며, 기본 타입에는 없는 추가적이거나 수정된 속성을 가집니다. |
| 2 | 구현 방식 | 언어마다 정해진 형태로 구체적으로 구현되어 있습니다. 예를 들어 C++에서는 문자(char), 정수(int), 실수(float), void가 대표적인 기본 데이터 타입입니다. | 사용자가 어떤 형태의 데이터를 다룰지 직접 정의하는 추상적인(abstract) 구현 방식을 따릅니다. 포인터(pointer), 배열(array), 구조체(structure), 공용체(union) 등이 대표적인 예입니다. |
| 3 | 데이터 처리 | 문자 데이터 타입은 문자를 저장하는 데 사용되며, char, signed char, unsigned char로 분류할 수 있습니다. | 포인터는 변수의 값을 저장하는 대신 변수의 메모리 주소를 저장하는 데 사용됩니다. |
| 4 | 할당 및 저장 | 정수 타입은 소수점이 없는 정수값을 저장하는 데 사용되며, signed와 unsigned로 나뉩니다. 더 세부적으로는 int, short int, long int로 분류됩니다. | 배열은 동일한 타입의 데이터를 담는 데 사용됩니다. 문자, 정수, 실수는 물론 사용자가 정의한 데이터 타입까지 포함할 수 있습니다. |
| 5 | 성능 | 기본 데이터 타입은 데이터의 종류와 성격만 다루므로, 언어의 구체적인 구현을 기반으로 동작하기 때문에 시간 복잡도 문제가 발생하지 않습니다. | 반면 파생 데이터 타입은 저장된 데이터를 조작하고 로직을 실행하는 작업이 중심이 되므로 시간 복잡도가 중요한 고려 사항이 됩니다. |
정리
기본 데이터 타입은 언어가 기본적으로 제공하는 빌딩 블록이라면, 파생 데이터 타입은 이러한 기본 타입을 조합해 개발자가 필요에 맞게 확장한 도구라고 할 수 있습니다. 두 타입의 특성과 차이를 정확히 이해하면, 상황에 맞는 효율적인 자료 구조 설계와 성능 최적화에 큰 도움이 됩니다.