LANGUAGE
C/C++
메모리를 직접 다루며 컴퓨터가 동작하는 물리적 원리를 체득하는 언어입니다. 포인터와 메모리 주소, 스택과 힙의 흐름을 눈으로 좇는 훈련을 통해 이후 어떤 언어를 배우더라도 “그 아래에서 실제로 무슨 일이 벌어지는가”를 판단할 수 있는 기초 체력을 기릅니다.
전체 12건
1. 출력(Output)
화면에 값을 출력하는 것부터 시작합니다. printf의 서식 지정자와 줄바꿈·버퍼 처리를 다룹니다
printf는 서식 지정자(%d, %f, %s)와 인자의 자료형을 컴파일러가 강제로 맞춰주지 않아, 경고를 켜지 않으면 엉뚱한 값이 찍히는 것을 직접 확인합니다. 문자열만 간단히 내보내는 puts와의 차이, 줄바꿈 \n과 버퍼가 실제로 비워지는 시점(fflush), 오류 메시지는 fprintf로 stderr에 따로 내보내 정상 출력과 섞이지 않게 하는 습관까지 첫 주에 잡습니다.
2. 변수와 자료형, 비트 수준의 데이터 표현
정수와 실수가 비트로 저장되는 방식, 오버플로우와 형 변환의 원리를 직접 확인합니다
부호 있는 정수의 2의 보수 표현, 실수의 IEEE 754 저장 방식을 직접 비트 단위로 출력해 눈으로 확인합니다. 암묵적 형 변환이 버그로 이어지는 실제 사례를 통해 왜 자료형 크기를 의식해야 하는지 체감합니다.
3. 포인터와 메모리 주소
변수의 주소를 다루는 포인터 문법과 역참조, 이중 포인터까지 단계적으로 익힙니다
&와 * 연산자의 의미부터 시작해, 포인터가 가리키는 값을 바꾸는 실습과 함수에 포인터를 전달해 원본 값을 변경하는 예제를 직접 작성합니다. 포인터의 포인터(이중 포인터)가 필요한 상황도 함께 다룹니다.
4. 배열과 포인터 연산
배열이 포인터로 어떻게 취급되는지, 포인터 산술 연산으로 메모리를 순회하는 법을 다룹니다
배열명이 첫 원소의 주소로 변환되는 원리와, 인덱스 접근이 사실 포인터 연산으로 컴파일되는 과정을 확인합니다. 포인터 증감 연산으로 배열을 순회하는 코드를 직접 작성하며 배열-포인터 관계를 완전히 이해합니다.
5. 함수와 스택 프레임
함수 호출 시 스택에 무엇이 쌓이는지, 재귀 호출의 메모리 구조를 시각적으로 이해합니다
함수를 호출할 때마다 스택 프레임이 생성·소멸되는 과정을 디버거로 추적하며, 지역 변수와 반환 주소가 어디에 저장되는지 확인합니다. 재귀 함수가 스택을 어떻게 소비하는지 살펴보며 스택 오버플로우의 원인도 이해합니다.
6. 동적 메모리 할당 (malloc / free)
힙 메모리를 직접 할당·해제하며 메모리 누수와 댕글링 포인터를 방지하는 습관을 훈련합니다
malloc/calloc/realloc으로 원하는 만큼 메모리를 할당하고 free로 해제하는 기본 패턴을 익힙니다. 해제를 잊어 발생하는 메모리 누수, 해제 후 접근하는 댕글링 포인터 문제를 직접 재현해보고 방지하는 코딩 습관을 만듭니다.
7. 구조체와 메모리 정렬(Alignment)
구조체 멤버가 메모리에 배치되는 원리와 패딩, 정렬 규칙을 실습으로 확인합니다
sizeof로 구조체 크기를 확인하며 컴파일러가 멤버 사이에 패딩 바이트를 삽입하는 이유를 이해합니다. 멤버 선언 순서를 바꿔가며 구조체 크기가 달라지는 걸 직접 관찰하고, 메모리 정렬이 성능에 미치는 영향까지 다룹니다.
8. 파일 입출력과 시스템 콜
표준 입출력 함수와 운영체제 시스템 콜의 관계를 이해하고 파일을 직접 다룹니다
fopen/fread/fwrite 같은 표준 라이브러리 함수가 내부적으로 open/read/write 시스템 콜을 호출하는 구조를 확인합니다. 텍스트 파일과 바이너리 파일을 각각 읽고 쓰는 실습을 통해 버퍼링의 개념도 함께 익힙니다.
9. C++ 객체지향 기초 (클래스 · 캡슐화)
구조체에서 클래스로 확장하며 캡슐화, 생성자·소멸자의 동작 원리를 익힙니다
C의 구조체에 함수(멤버 함수)가 결합된 형태로 클래스를 이해하고, public/private 접근 제어로 데이터를 캡슐화하는 이유를 다룹니다. 객체가 생성·소멸될 때 생성자와 소멸자가 자동으로 호출되는 흐름을 추적합니다.
10. STL과 표준 컨테이너
vector, map 등 표준 라이브러리 컨테이너의 내부 구조와 활용법을 실전 코드로 학습합니다
직접 만든 동적 배열과 vector를 비교하며 STL이 내부적으로 어떻게 메모리를 관리하는지 이해합니다. map, set 같은 연관 컨테이너와 반복자(iterator) 개념까지 실전 예제로 다룹니다.
11. 스마트 포인터와 RAII
메모리를 자동으로 관리하는 RAII 패턴과 unique_ptr, shared_ptr의 동작 원리를 다룹니다
객체의 생성자·소멸자에 자원 관리를 위임하는 RAII 원칙을 이해하고, 이를 구현한 스마트 포인터가 어떻게 소유권을 관리하는지 다룹니다. unique_ptr과 shared_ptr의 차이, 순환 참조 문제와 weak_ptr까지 확장합니다.
12. 미니 프로젝트
지금까지 배운 포인터와 메모리 관리 지식을 총동원해 나만의 메모리 매니저를 직접 구현합니다
malloc/free를 대체하는 간단한 메모리 풀(memory pool)을 직접 설계·구현하며 12주 동안 배운 포인터, 구조체, 동적 할당 지식을 하나의 프로젝트로 통합합니다. 코드 리뷰를 통해 실제 시스템 프로그래밍 관점에서 피드백을 받습니다.