-
목차
반갑습니다! 여러분의 컴퓨터 마스터입니다. 💻
어제와 그저께에 이어, 오늘은 C언어의 '꽃'이자 '완성'이라고 할 수 있는 심화 개념들을 다뤄보겠습니다.
오늘의 주제는 데이터를 묶어 관리하는 구조체, 그리고 컴퓨터의 자원을 효율적으로 쓰는 동적 메모리 할당입니다.
구초제와 동적 메모리 할당에 대해서 이해를 하시면 프로그래밍을 다룰때 이해하는 폭이 더 쉬워지겠죠?~
힘들어도 조금만 참고, 저와 함께 C언어에 마스터로 가보시죠~
[C언어 기초 3탄] 데이터의 집합과 메모리의 유연한 활용
우리는 지금까지 변수 하나에 값 하나를 담는 법, 그리고 같은 종류의 값을 여러 개 담는 배열을 배웠습니다. 하지만 실제 세상의 데이터는 그렇게 단순하지 않죠.
1. 다양한 정보를 하나로! '구조체(struct)'
학생 한 명의 정보를 관리한다고 생각해 봅시다. 이름(문자열), 나이(정수), 성적(실수) 등 자료형이 제각각이죠? 이걸 따로따로 변수로 만들면 관리하기가 너무 힘듭니다. 이때 사용하는 것이 바로 구조체입니다.
struct Student { char name[20]; int age; float score; };이렇게 선언해두면 Student라는 나만의 새로운 자료형이 탄생하는 셈입니다. 마치 서랍장에 '이름 칸', '나이 칸', '성적 칸'을 만들어두고 통째로 들고 다니는 것과 같죠.
마스터의 팁: 구조체는 객체 지향 언어(C++, Java 등)의 '클래스(Class)' 개념으로 이어지는 아주 중요한 징검다리입니다. 여기서 개념을 잘 잡으면 나중에 다른 언어를 배울 때 훨씬 수월해집니다!

데이터의 집합과 메모리의 유연한 활용 2. 메모리를 내 마음대로, '동적 할당(Dynamic Allocation)'
지금까지 우리가 만든 배열은 int arr[10]; 처럼 처음에 크기를 정해야 했습니다. 하지만 프로그램을 실행하다가 "어? 데이터가 10개가 아니라 100개가 들어오네?" 하는 상황이 생기면 어떻게 할까요?
이럴 때 필요한 것이 동적 메모리 할당입니다.
- malloc(): "컴퓨터야, 나 지금 메모리 400바이트만 빌려줘!"라고 요청하는 함수입니다.
- free(): "빌린 메모리 다 썼어, 이제 돌려줄게!"라고 반납하는 함수입니다.
컴퓨터 메모리에는 **스택(Stack)**과 **힙(Heap)**이라는 영역이 있습니다. 우리가 평소 쓰는 변수는 스택에 쌓이고, 동적 할당으로 빌려온 메모리는 힙 영역에 자리 잡습니다.
⚠️ 주의하세요! 메모리를 빌려놓고(malloc) 돌려주지(free) 않으면 **'메모리 누수(Memory Leak)'**라는 현상이 발생합니다. 마치 도서관에서 책을 빌려놓고 영영 반납하지 않아 도서관이 꽉 차버리는 것과 같죠. C언어 개발자의 숙련도는 이 free를 얼마나 꼼꼼하게 하느냐에서 결정됩니다.
3. C언어가 여전히 '최고'인 이유
많은 현대적 언어들이 메모리 관리를 자동으로 해줍니다(Garbage Collection). 하지만 C언어는 개발자가 직접 메모리를 주무를 수 있게 허락합니다.
- 자유도: 하드웨어를 가장 밑바닥부터 제어할 수 있습니다.
- 성능: 불필요한 자동 관리 시스템이 없어서 속도가 압도적으로 빠릅니다.
- 적용 분야: 자율주행 자동차 시스템, 스마트폰 운영체제 커널, 로봇 제어 등 '성능과 안정성'이 생명인 곳에는 반드시 C언어가 있습니다.
4. 나의 실수이야기
"처음에 구조체를 프로그래밍 하다가 세미콜론(;)을 빠트리고 작성하다가 30분 동안 헤맸던 기억이 납니다. 여러분도 struct 정의 마지막에는 꼭 세미콜론을 넣는 것을 잊지 마세요~
5. 배열(Array)과 구조체(struct)의 차이점
배열과 구조체는 언뜻 보면 같은 것이라 생각할 수 있는데 그 차이점을 비교해 드리겠습니다.
구분 배열(Array) 구조체(Struct) 데이터 종류 동일한 자료형만 가능 서로 다른 자료형 가능 접근 방식 인덱스(0, 1, 2...) 멤버 연산자(.) 주요 목적 반복적인 데이터 처리 연관된 데이터 그룹화 🏁 글을 마치며
3일에 걸쳐 C언어의 기초부터 심화까지 훑어보았습니다. C언어는 처음엔 딱딱하고 차갑게 느껴지지만, 익숙해지면 컴퓨터의 가장 깊은 곳까지 이해할 수 있게 해주는 아주 정직하고 매력적인 언어입니다.
이 글로 인해 C언어에 매력에 빠졌다는 소식이 들려오면 저도 정말 기쁠 것 같네요! 다음에도 유익한 IT 지식으로 찾아오겠습니다.
여러분의 공감과 댓글은 저(컴퓨터 마스터)를 춤추게 합니다! 💃🕺
감사합니다.
'컴퓨터' 카테고리의 다른 글
[C언어 기초 2탄] 함수와 배열, 그리고 대망의 포인터 맛보기 (0) 2026.04.22 프로그래밍 언어 C언어 (메모리 정렬과 패딩,시스템 콜,멀티스레딩,네트워크소켓프로그래밍) (0) 2026.04.21 프로그래밍 언어 C언어(전처리기, 분할 컴파일, 메모리 세부 구조, 비트 연산, 함수 포인터, 자료구조) (0) 2026.04.20 C언어 다음에는 어떤 언어를 배워야 할까? (0) 2026.04.19 프로그래밍 언어 C언어(변수와 포인터, 메모리관리등) (0) 2026.04.19
