개요
이 프로젝트는 ecole42의 C++ 교육 과정을 통해 C++ 프로그래밍의 기초부터 고급 개념까지 단계적으로 학습할 수 있도록 설계되었다. 각 모듈은 특정 C++ 개념에 집중하여 실습을 통해 이해를 돕는다.
프로젝트 구조
42cpp_piscine/
├── module00/ # C++ 기초
├── module01/ # 메모리 할당, 참조, 포인터
├── module02/ # 고정소수점, 연산자 오버로딩
├── module03/ # 상속
├── module04/ # 다형성, 추상 클래스
├── module05/ # 예외 처리
├── module06/ # 타입 캐스팅
├── module07/ # 템플릿
└── module08/ # STL 컨테이너
모듈별 설명
Module 00 - C++ 기초
C++의 기본 문법과 클래스 개념을 학습한다.
- ex00 - megaphone: 문자열을 대문자로 변환하는 프로그램
- ex01 - phonebook: 간단한 전화번호부 프로그램 (최대 8개 연락처)
- ex02 - accounts: 계좌 클래스 구현
주요 학습 내용:
- 기본 입출력 (
std::cout,std::cin) - 문자열 처리
- 클래스와 객체의 기본 개념
Module 01 - 메모리 할당과 참조
메모리 관리, 포인터, 참조에 대해 학습한다.
- ex00 - Pony: 힙과 스택에 객체 생성하기
- ex01: 포인터와 참조의 차이
- ex02 - Zombie: 동적 메모리 할당을 사용한 좀비 생성
- ex03 - ZombieHorde: 좀비 무리 생성
- ex04: 포인터와 참조 심화
- ex05 - Brain: 포인터를 사용한 객체 관계
- ex06 - Weapon: 참조와 포인터를 사용한 무기 시스템
- ex07 - replace: 파일 읽기/쓰기 및 문자열 치환
- ex08: 참조와 포인터 심화
- ex09 - Logger: 파일 로깅 시스템
- ex10 - Read: 파일 읽기 프로그램
주요 학습 내용:
- 힙(Heap)과 스택(Stack) 메모리
- 동적 메모리 할당 (
new,delete) - 포인터와 참조의 차이와 사용법
- 파일 입출력 (
std::ifstream,std::ofstream)
Module 02 - 고정소수점과 연산자 오버로딩
고정소수점 수학과 연산자 오버로딩을 학습한다.
- ex00: 기본 클래스 복사 생성자와 할당 연산자
- ex01: 고정소수점 클래스 기본 구현
- ex02: 고정소수점 연산자 오버로딩
- ex03 - eval_expr: 고정소수점을 사용한 수식 계산기
주요 학습 내용:
- 복사 생성자와 할당 연산자
- 연산자 오버로딩 (
+,-,*,/,==,!=,>,<등) - 고정소수점 수학 구현
- 전위/후위 증감 연산자
Module 03 - 상속
C++의 상속 개념을 학습한다.
- ex00 - FragTrap: 기본 클래스 구현
- ex01 - ScavTrap: 상속을 통한 클래스 확장
- ex02: 상속 계층 구조 (ClapTrap → FragTrap, ScavTrap)
- ex03 - NinjaTrap: 다중 상속 개념
- ex04 - SuperTrap: 다중 상속과 가상 상속
주요 학습 내용:
- 클래스 상속 (
: public BaseClass) - 접근 제어자 (
public,protected,private) - 생성자/소멸자 호출 순서
- 다중 상속과 다이아몬드 문제
- 가상 상속 (
virtual)
Module 04 - 다형성과 추상 클래스
다형성과 추상 클래스, 인터페이스를 학습한다.
- ex00 - Sorcerer: 가상 함수와 다형성 기본
- ex01 - Character: 추상 클래스와 순수 가상 함수
- ex02 - Squad: 인터페이스 구현
- ex03 - Materia: 인터페이스와 팩토리 패턴
- ex04 - Mining: 인터페이스 다중 구현
주요 학습 내용:
- 가상 함수 (
virtual) - 순수 가상 함수 (
= 0) - 추상 클래스
- 인터페이스 패턴
- 다형성 활용
Module 05 - 예외 처리
C++의 예외 처리 메커니즘을 학습한다.
- ex00 - Bureaucrat: 기본 예외 처리
- ex01: 예외 클래스 정의
- ex02: 예외 처리 심화
- ex03: 예외 처리 실전
- ex04: 예외 처리 고급
- ex05: 예외 처리 종합
주요 학습 내용:
try-catch블록- 예외 클래스 정의 및 상속
std::exception상속- 예외 안전성 (Exception Safety)
- RAII 패턴
Module 06 - 타입 캐스팅
C++의 다양한 타입 캐스팅 방법을 학습한다.
- ex00 - Convert: 스칼라 타입 변환
- ex01: 타입 캐스팅 심화
- ex02: 다양한 캐스팅 연산자
주요 학습 내용:
static_cast: 안전한 타입 변환dynamic_cast: 런타임 타입 확인reinterpret_cast: 비트 단위 재해석const_cast: const 제거
Module 07 - 템플릿
C++ 템플릿 프로그래밍을 학습한다.
- ex00: 함수 템플릿
- ex01: 클래스 템플릿
- ex02: 템플릿 특수화
주요 학습 내용:
- 함수 템플릿 (
template<typename T>) - 클래스 템플릿
- 템플릿 특수화
- 템플릿 메타프로그래밍 기초
Module 08 - STL 컨테이너
C++ 표준 라이브러리의 컨테이너를 학습한다.
- ex00 - easyfind: STL 컨테이너 탐색
- ex01: 컨테이너 심화
- ex02: 알고리즘 활용
주요 학습 내용:
std::vector,std::list,std::dequestd::set,std::map- 반복자 (Iterator)
- STL 알고리즘 (
std::find,std::sort등)
빌드 및 실행
각 모듈의 각 exercise는 독립적으로 빌드할 수 있다. 대부분의 exercise는 Makefile 또는 compile.sh 스크립트를 포함하고 있다.
Makefile이 있는 경우:
cd module00/ex00
make
./megaphone "hello world"
compile.sh가 있는 경우:
cd module01/ex00
chmod +x compile.sh
./compile.sh
./a.out
학습 내용
이 프로젝트를 통해 학습하는 주요 C++ 개념들:
- 기본 문법: 변수, 함수, 클래스, 객체
- 메모리 관리: 힙/스택, 동적 할당, 스마트 포인터 개념
- 객체지향 프로그래밍: 캡슐화, 상속, 다형성
- 연산자 오버로딩: 사용자 정의 타입의 연산자 정의
- 예외 처리: 안전한 에러 처리 메커니즘
- 템플릿: 제네릭 프로그래밍
- STL: 표준 라이브러리 활용
참고사항
- 모든 코드는 42 코딩 스타일 가이드를 따른다
- 각 exercise는 특정 C++ 개념에 집중하여 설계되었다
en.subject.pdf파일에서 각 모듈의 상세한 요구사항을 확인할 수 있다