이번 연재의 목표: C로 값과 메모리를 이해하고, C++로 그 위에 타입과 소유권을 올려 프로그램을 구성합니다.
고수는 문법을 많이 외운 상태가 아닙니다. 값이 어느 메모리에 있는지, 그 메모리를 누가 돌려주는지, 어떤 코드가 정의되지 않은 동작인지를 설명할 수 있는 상태입니다. 출력문부터 포인터, 동적 메모리, 클래스, 가상 함수, 표준 라이브러리, 스마트 포인터, 이동까지 이 순서로 갑니다.
C 예제는 C17, C++ 예제는 C++17입니다. 컴파일러는 gcc와 g++입니다. 소스 파일은 UTF-8로 저장합니다. 01편부터 14편은 C이고, 15편부터는 C++입니다.
목차
01 — 컴파일과 첫 프로그램 소스 파일을 실행 파일로 만들고 main에서 한 줄을 출력합니다.
02 — 변수와 자료형 정수, 실수, 문자를 구분하고 메모리 크기를 확인합니다.
03 — 연산과 형 변환 정수 나눗셈과 실수 나눗셈, 대입과 비교를 구분합니다.
04 — 출력과 입력 printf 서식과 scanf가 값을 넣는 주소를 다룹니다.
05 — 조건문 if와 switch로 연체료와 메뉴를 나눕니다.
06 — 반복문 for와 while로 합계를 구하고 반복을 멈춥니다.
07 — 함수 일을 함수로 나누고, 인자로 넘어간 값이 복사된다는 점을 확인합니다.
08 — 배열 같은 형의 값을 나란히 두고, 길이를 함께 넘깁니다.
09 — 포인터 주소와 그 주소의 값을 구분하고 함수로 주소를 넘깁니다.
10 — 문자열 문자 배열과 끝의 널 문자, 바이트 수와 글자 수를 구분합니다.
11 — 구조체 책 한 권의 번호, 제목, 가격을 하나의 값으로 묶습니다.
12 — 동적 메모리 실행 중에 메모리를 빌리고 반드시 돌려줍니다.
13 — 파일 텍스트 파일에 책을 기록하고 다시 읽습니다.
14 — 헤더와 분할 컴파일 선언과 정의를 나누고 파일 여러 개를 함께 컴파일합니다.
15 — 참조와 C++ 입출력 참조라는 별명과 std::string, std::cout으로 C++을 시작합니다.
16 — 클래스 데이터와 그 데이터를 다루는 함수를 한 타입으로 묶습니다.
17 — 생성자와 소멸자 객체가 생길 때와 끝날 때 무슨 일이 일어나는지 확인합니다.
18 — 상속과 가상 함수 부모의 인터페이스로 자식의 계산을 호출합니다.
19 — 템플릿 같은 알고리즘을 여러 타입에 적용합니다.
20 — 표준 라이브러리 vector와 map으로 목록과 검색을 만듭니다.
21 — RAII와 스마트 포인터 자원의 수명을 객체의 수명에 묶습니다.
22 — 이동과 람다 복사 없이 소유권을 옮기고, 짧은 함수를 값처럼 넘깁니다.
23 — 정의되지 않은 동작 컴파일러가 보장하지 않는 코드와, 그 코드를 피하는 습관을 정리합니다.
학습 방법
한 편의 코드를 파일로 저장한 뒤 그 편에 적힌 명령으로 컴파일합니다. 경고가 나오면 다음 편으로 넘어가지 않습니다. 출력 숫자는 실행 전에 손으로 계산해 맞춥니다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
댓글은 구글이나 카카오로 시작한 뒤에 남길 수 있습니다.
등록된 댓글이 없습니다.