서론: 우주 비행사의 데이터를 관리하는 법
우주선에 탑승한 우주 비행사의 상태를 모니터링하는 프로그램을 만든다고 가정해 봅시다. 한 명의 비행사에게는 이름(문자열), 나이(정수), 심박수(정수), 체온(실수) 등 서로 다른 형태의 데이터가 존재합니다.
만약 비행사가 3명이라면 변수를 어떻게 만들어야 할까요? name1, age1, temp1... 이런 식으로 수십 개의 변수를 나열해야 할까요? 이렇게 하면 데이터가 뿔뿔이 흩어져서 관리가 불가능해집니다.
이때 필요한 것이 바로 '구조체(Structure)'입니다. 오늘 9편에서는 현실 세계의 복잡한 사물을 컴퓨터 속에서 하나의 단위로 정의하는 '사용자 정의 자료형'의 강력함에 대해 알아보겠습니다.
본론 1: 배열과는 다르다! (종합 선물 세트)
지난 7편에서 배운 배열(Array)은 강력하지만 치명적인 단점이 있습니다. 바로 '같은 자료형'만 담을 수 있다는 점입니다. 정수면 정수, 실수면 실수끼리만 모을 수 있죠.
하지만 구조체는 다릅니다.
- 배열: 계란만 30개 들어있는 계란 판 (All
int) - 구조체: 샌드위치, 음료수, 사과가 함께 들어있는 도시락 가방 (
char+int+double혼합)
C언어의 struct 키워드는 서로 다른 데이터들을 하나의 패키지로 묶어서, 마치 int나 double처럼 '새로운 자료형'으로 재탄생시킵니다.
본론 2: 현실을 모델링하는 기술
NASA 엔지니어들은 구조체를 사용하여 위성에서 보내오는 복잡한 신호를 '패킷(Packet)'이라는 단위로 정의합니다.
예를 들어 struct Satellite라는 구조체를 만들고, 그 안에 다음과 같은 멤버를 넣습니다.
- ID (int): 위성 번호
- Speed (double): 현재 속도
- Status (char): 작동 상태 ('A'ctive / 'O'ffline)
이렇게 하면 우리는 satellite1이라는 변수 하나만으로 위성의 모든 정보를 통째로 이동시키거나 복사할 수 있습니다. 흩어져 있던 데이터들이 비로소 '의미 있는 하나의 객체(Object)'가 되는 순간입니다.
본론 3: 객체 지향(OOP)의 조상님
요즘 가장 많이 쓰이는 파이썬, 자바, C++은 모두 '객체 지향 언어'입니다. 그리고 이 객체 지향의 핵심인 '클래스(Class)'의 모태가 바로 C언어의 구조체입니다.
구조체는 단순히 데이터를 묶는 기능만 했지만, 나중에 여기에 '함수(기능)'까지 포함시키면서 발전한 것이 바로 클래스입니다.
따라서 C언어의 구조체를 이해한다는 것은, 현대 프로그래밍의 근간인 '데이터 모델링'을 이해하는 것과 같습니다. "데이터를 어떻게 효율적으로 묶어서 관리할 것인가?" 이것이 시스템 설계의 시작이기 때문입니다.
결론: 관련된 것은 하나로 묶어라
정리 정돈의 기본은 '관련된 물건끼리 상자에 담는 것'입니다. 구조체는 프로그래밍 세계의 정리 정돈 상자입니다.
여러분이 코드를 짤 때, 변수 이름 뒤에 1, 2, 3을 붙이며 고통받고 있다면, 당장 구조체를 사용해야 할 신호입니다. 데이터를 체계적으로 구조화하는 습관이 여러분을 고급 개발자로 만들어 줄 것입니다.
다음 [Part 10. 재귀(Recursion)의 마법] 편에서는, 함수가 자기 자신을 호출하여 무한한 작업을 수행하는, 알고리즘의 꽃이자 난제인 '재귀 함수'의 세계로 떠나보겠습니다. (Part 2 심화편의 마지막 이야기입니다!)